[CMake] Setting compile defs with: Cuda, add_subdirectory, and set_target_properties (COMPILE_DEFINITIONS)

James Sharpe mail at jsharpe.net
Wed Jul 14 14:52:44 EDT 2010


Try changing your macro into a function instead.

James

On 14/07/2010, Brian Davis <bitminer at gmail.com> wrote:
> I have a macro which gets called to create cuda and matlab mex enabled
> libraries and apps.  I call this macro **twice from within a single
> directory** to create 2 libraries.  Problem is that I desire to set compiler
> defines -DWHATEVER=goop etc differently for each lib (for each of the two in
> question).  For instance -DCPU_RECON=yes for cpu library and -DGPU_RECON=yes
> for gpu library which rely on the same source code in the same directory:
>
>
> -- snip - the macro --
> macro( add_gpu_matlab_mex_library LIB_NAME )
>
>     PARSE_CMAKE_ARGUMENTS(ARG
>         "SRCDIRS;CPP_SOURCES;CU_SOURCES;LINK_LIBS;DEFINES" ""
>         ${ARGN}
>     )
>
>         foreach( DEFINE_STR ${ARG_DEFINES} )
>             message( "DEFINE_STR = ${DEFINE_STR}" )
>             add_definitions( -D${DEFINE_STR} )
>         endforeach()
> ...
> ...
>
>     if(DEFINED ARG_CU_SOURCES )
>         message( "ARG_CU_SOURCES is defined as = ${ARG_CU_SOURCES}" )
>         CUDA_ADD_LIBRARY( ${MATLAB_CUDA_MEX_NAME} SHARED
> ${MATLAB_CUDA_FILES} )
>     else()
>         message( "ARG_CU_SOURCES is not defined" )
>        ADD_LIBRARY( ${MATLAB_CUDA_MEX_NAME} SHARED ${MATLAB_CUDA_FILES} )
>     endif()
> ...
> ...
>     SET_TARGET_PROPERTIES( ${MATLAB_CUDA_MEX_NAME} PROPERTIES
>       SUFFIX .mexw64
>        LINKER_LANGUAGE CXX
>        COMPILE_DEFINITIONS -DMY_DEFINE=DEFINE_THIS_GOOP
>       LINK_FLAGS /export:mexFunction
>       )
> ...
> ...
> endmacro()
>
> --end snip--
>
> An example of using this macro in my CMakeLists.txt file
>
>
> --snip--
> add_gpu_matlab_mex_library(
>     gpuPMatrixRecon
>     CPP_SOURCES
>         gpuPMatrixRecon.cpp
>         CUDADeviceProperties.cpp
> #    LINK_LIBS dvipGPUCUDAUtil
>     CU_SOURCES  gpuPMatrixRecon.cu
>     DEFINES CUDADeviceProperties_DLLExport=yes GPU_RECON=yes
> )
>
> add_gpu_matlab_mex_library(
>     cpuPMatrixRecon
>     CPP_SOURCES
>         gpuPMatrixRecon.cpp
>         CUDADeviceProperties.cpp
> #    LINK_LIBS dvipGPUCUDAUtil
>     CU_SOURCES  gpuPMatrixRecon.cu
>     DEFINES CUDADeviceProperties_DLLExport=yes CPU_RECON=yes
> #    DEFINES CUDADeviceProperties_DLLExport=yes
>
>
> --end snip--
>
> Both are being compiled as a cuda library as each contains the .cu file even
> though in the cpu version the cuda code is #ifdef'ed out ... at least it
> should be if I could get this to work.
>
> Problem comes is that using add_definitions causes the defines to be the
> same for each library and using set_target_properties seems to have no
> effect.
>
> --snip cpu version compile output--
> 2>C:/CUDA/bin64/nvcc.exe
> C:/projects/NIH2009/source/branches/trunk/source/Matlab/lib/3rdParty/Siemens/gpu/PMatrixRecon/gpuPMatrixRecon.cu
> -arch sm_11 --ptxas-options=-v -maxrregcount=32 -Xcompiler
> /EHsc,/W3,/nologo,/Od,/Zi,/MTd -m64 -DCUDADeviceProperties_DLLExport=yes
> -DGPU_RECON=yes -DgpuPMatrixRecon_EXPORTS -ccbin "c:/Program
> --end snip --
>
> --snip gpu version compile output--
> 2>C:/CUDA/bin64/nvcc.exe
> C:/projects/NIH2009/source/branches/trunk/source/Matlab/lib/3rdParty/Siemens/gpu/PMatrixRecon/gpuPMatrixRecon.cu
> -arch sm_11 --ptxas-options=-v -maxrregcount=32 -Xcompiler
> /EHsc,/W3,/nologo,/Od,/Zi,/MTd -m64 -DCUDADeviceProperties_DLLExport=yes
> -DGPU_RECON=yes -DgpuPMatrixRecon_EXPORTS -ccbin "c:/Program
> --end snip--
>
> These are strangely... the same.
>
> set_target_properties should work for a cuda library right?
>
> add_definitions is directory global, but I can't figure out why I do not see
> both definitions (-DGPU_RECON=yes and -DCPU_RECON=yes) in each library.  I
> only see the first in the VS project for cpu version and gpu versions.  I
> also do not understand why I do not see  -DMY_DEFINE=DEFINE_THIS_GOOP from
> set_target_properties in either project.
>

-- 
Sent from my mobile device


More information about the CMake mailing list