我有一个可视化的c ++项目,它创建了一个dll.对于这个项目,我有一个工作的CMakeLists.txt.
现在我创建了两个完成项目的cuda源文件,并且使用visual studio,构建工作正常.我想将匹配的命令添加到我的cmake文件中.谁能告诉我需要添加的基本命令?
我尝试构建一个dll库,其中我使用.cu和.cpp文件....我的cmake文件的重要部分如下所示:
# ----------------------------------------------------------------------------
# Set Cuda properties
# ----------------------------------------------------------------------------
enable_language(CUDA)
set(CUDA_SEPARABLE_COMPILATION ON)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
if (CMAKE_SIZEOF_VOID_P MATCHES 8)
set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON)
endif()
set(CUDA_NVCC_FLAGS "-gencode arch=compute_50,code=sm_50;-rdc=true;-use_fast_math")
message(STATUS "CUDA_PROPAGATE_HOST_FLAGS: ${CUDA_PROPAGATE_HOST_FLAGS}")
message(STATUS "CUDA_HOST_COMPILER: ${CUDA_HOST_COMPILER}")
message(STATUS "CUDA_NVCC_FLAGS: ${CUDA_NVCC_FLAGS}")
# ----------------------------------------------------------------------------
# Create shared library project
# ----------------------------------------------------------------------------
add_library(${LIB_NAME} SHARED ${HEADERS} ${SOURCES} ${CUDA_SOURCES})
set(CUDA_LIBRARIES "cudadevrt.lib;cudart.lib")
target_link_libraries(${LIB_NAME} ${CUDA_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
但它没有使用正确的标志编译cuda文件.同样在visual studio中,预处理器定义也在属性的cuda部分....任何建议?
我将尝试使用评论中的讨论回答这个问题,并添加一些额外的信息.
首先,有两种方法可以在CMake中启用CUDA支持.一个是旧FindCUDA模块,另一个是在CMake 3.8中添加的新内置CUDA语言支持,并在此处进行了解释.您可以选择其中一个(但您可能希望使用内置的新项目支持),但是您必须坚持自己的选择.
要使用内置支持,您可以将其添加到project(...)语句中或使用:
enable_language(CUDA);
Run Code Online (Sandbox Code Playgroud)
要使用旧FindCUDA包,您将使用:
find_package(CUDA);
Run Code Online (Sandbox Code Playgroud)
请注意,这两个选项使用完全不同的变量进行设置.要查看变量被支持的FindCUDA看到这个页面,并内置支持CUDA看到这个(不要忘记,<LANG>占位符可以用任何语言,这意味着被替换CUDA也是可用的替换之一).
例如,FindCUDA您将使用CUDA_NVCC_FLAGS手动设置编译器标志,并使用内置语言支持您将CMAKE_CUDA_FLAGS用于相同的目的.根据经验:如果变量以CUDA_它开头,它是FindCUDA包的一部分,如果它以它开头CMAKE_,则它是内置支持的一部分.