For anyone interested in a test case here it is.  Put all files into same directory. Or see attached zip file.<br><br>--snip add_gpu_matlab_mex_library.cmake --<br><br><br>macro( add_gpu_matlab_mex_library LIB_NAME )<br>#function( add_gpu_matlab_mex_library LIB_NAME )<br>
<br>    PARSE_CMAKE_ARGUMENTS(ARG<br>        &quot;SRCDIRS;CPP_SOURCES;CU_SOURCES;LINK_LIBS;DEFINES&quot; &quot;&quot;<br>        ${ARGN}<br>    )<br><br><br>    message( &quot;ARG_SRCDIRS = ${ARG_SRCDIRS}&quot; )<br>    message( &quot;ARG_CPP_SOURCES = ${ARG_CPP_SOURCES}&quot; )<br>
    message( &quot;ARG_CU_SOURCES = ${ARG_CU_SOURCES}&quot; )<br>    message( &quot;ARG_LINK_LIBS= ${ARG_LINK_LIBS}&quot;)<br> <br>    cmake_minimum_required(VERSION 2.8)<br><br>#    SET( MATLAB_CUDA_MEX_NAME ${LIB_NAME} )<br>
<br>    SET( MATLAB_CUDA_FILES ${ARG_CU_SOURCES} ${ARG_CPP_SOURCES} )<br><br>    set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS 1)<br><br><br>    INCLUDE_DIRECTORIES( <br>        ./<br>    )<br><br><br>    LINK_DIRECTORIES(<br>
        ${MATLAB_LIBRARIES}<br>        ${MATLAB_MEX_LIBRARY}<br>        ${MATLAB_MX_LIBRARY}<br>        ${MATLAB_ENG_LIBRARY}<br>        &quot;${TOP}/build/dvip4-Win64/lib/Debug&quot;<br>    )<br><br>    SET( MATLAB_LINK_LIBS<br>
#        libmx<br>#       libmex<br>#        libmat<br>    )<br><br><br><br>    SET( ${CUDA_LIBRARIES}<br>#        cudart<br>#        cuda<br>#        cublas<br>#        cublasemu<br>    )<br><br><br>    foreach( DEFINE_STR ${ARG_DEFINES} )<br>
        message( &quot;DEFINE_STR = ${DEFINE_STR}&quot; )<br>        add_definitions( -D${DEFINE_STR} )<br>    endforeach()<br><br><br>    if(DEFINED ARG_CU_SOURCES )<br>        message( &quot;ARG_CU_SOURCES is defined as = ${ARG_CU_SOURCES}&quot; )<br>
        CUDA_ADD_LIBRARY( ${LIB_NAME} SHARED ${MATLAB_CUDA_FILES} )<br>    else()<br>        message( &quot;ARG_CU_SOURCES is not defined&quot; )<br>       ADD_LIBRARY( ${LIB_NAME} SHARED ${MATLAB_CUDA_FILES} )<br>    endif()<br>
<br>    TARGET_LINK_LIBRARIES( ${LIB_NAME}<br>        ${MATLAB_LINK_LIBS}<br>        ${CUDA_LIBRARIES}<br>        ${ARG_LINK_LIBS}<br>    )<br><br><br>    if( DEFINED ARG_DEFINES )<br>    SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES <br>
        PREFIX &quot;&quot; <br>#        COMPILE_DEFINITIONS ${ARG_DEFINES} )<br>#        COMPILE_DEFINITIONS MY_DEFINE=DEFINE_THIS_GOOP<br>        COMPILE_FLAGS -DMY_DEFINE=DEFINE_THIS_GOOP<br>        )<br>    endif()<br>
    <br>    SET_TARGET_PROPERTIES( ${LIB_NAME} PROPERTIES<br>      SUFFIX .mexw64<br>       LINKER_LANGUAGE CXX <br>      LINK_FLAGS /export:mexFunction<br>      COMPILE_FLAGS -DMY_DEFINE=DEFINE_THIS_GOOP<br>      COMPILE_FLAGS_DEBUG -DMY_DEFINE=DEFINE_THIS_GOOP<br>
      COMPILE_DEFINITIONS MY_DEFINE=DEFINE_THIS_GOOP<br>      )<br><br>    INSTALL( TARGETS ${LIB_NAME} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} )<br><br>    INSTALL( TARGETS ${SQUARE_ME_TEST_APP}<br>        DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}<br>
    )<br><br><br><br><br>endmacro()<br>#endfunction()<br><br>--end snip-<br><br>--snip  CMakeLists.txt --<br>include( parse_cmake_arguments.cmake )<br>include( add_gpu_matlab_mex_library.cmake )<br><br> cmake_minimum_required(VERSION 2.8)<br>
<br><br>find_package( cuda )<br><br>SET( CUDA_VERBOSE_BUILD YES CACHE BOOL &quot;&quot; FORCE )<br><br>add_gpu_matlab_mex_library( <br>    gpuPMatrixRecon<br>    CPP_SOURCES <br>        test1.cpp <br>        test2.cpp<br>
    CU_SOURCES  <a href="http://test1.cu">test1.cu</a><br>    DEFINES CUDADeviceProperties_DLLExport=yes GPU_RECON=yes<br>)<br> <br># This does not work here either    <br>#SET_TARGET_PROPERTIES( gpuPMatrixRecon PROPERTIES<br>
#    COMPILE_DEFINITIONS GPU_RECON=yes<br>#    )<br>    <br>    <br>add_gpu_matlab_mex_library( <br>    cpuPMatrixRecon<br>    CPP_SOURCES <br>        test1.cpp<br>        test2.cpp<br>    CU_SOURCES  <a href="http://test1.cu">test1.cu</a><br>
    DEFINES CUDADeviceProperties_DLLExport=yes CPU_RECON=yes<br>)<br><br><br>#SET_TARGET_PROPERTIES( cpuPMatrixRecon PROPERTIES<br>#    COMPILE_DEFINITIONS CPU_RECON=yes<br>#    )<br>-- end snip --<br><br>--snip parse_cmake_arguments.cmake--<br>
<br># code from <a href="http://www.cmake.org/Wiki/CMakeMacroParseArguments">http://www.cmake.org/Wiki/CMakeMacroParseArguments</a><br>MACRO(PARSE_CMAKE_ARGUMENTS prefix arg_names option_names)<br>  SET(DEFAULT_ARGS)<br>  FOREACH(arg_name ${arg_names})    <br>
    SET(${prefix}_${arg_name})<br>  ENDFOREACH(arg_name)<br>  FOREACH(option ${option_names})<br>    SET(${prefix}_${option} FALSE)<br>  ENDFOREACH(option)<br><br>  SET(current_arg_name DEFAULT_ARGS)<br>  SET(current_arg_list)<br>
  FOREACH(arg ${ARGN})            <br>    SET(larg_names ${arg_names})    <br>    LIST(FIND larg_names &quot;${arg}&quot; is_arg_name)                   <br>    IF (is_arg_name GREATER -1)<br>      SET(${prefix}_${current_arg_name} ${current_arg_list})<br>
      SET(current_arg_name ${arg})<br>      SET(current_arg_list)<br>    ELSE (is_arg_name GREATER -1)<br>      SET(loption_names ${option_names})    <br>      LIST(FIND loption_names &quot;${arg}&quot; is_option)            <br>
      IF (is_option GREATER -1)<br>         SET(${prefix}_${arg} TRUE)<br>      ELSE (is_option GREATER -1)<br>         SET(current_arg_list ${current_arg_list} ${arg})<br>      ENDIF (is_option GREATER -1)<br>    ENDIF (is_arg_name GREATER -1)<br>
  ENDFOREACH(arg)<br>  SET(${prefix}_${current_arg_name} ${current_arg_list})<br>ENDMACRO(PARSE_CMAKE_ARGUMENTS)<br><br><br>--end snip--<br><br>--snip test1.cpp--<br>/* Gateway function */<br>void mexFunction( void /*int nlhs, mxArray *plhs[],<br>
int nrhs, const mxArray *prhs[]*/)<br>{<br>}<br>--end snip--<br><br>--snip <a href="http://test1.cu">test1.cu</a> --<br><br>__global__ void my_kernel( float * data )<br>{<br><br>}<br>--end snip--<br><br>-snip test2.cpp --<br>
void foo( void )<br>{<br><br>}<br>--end snip-<br>