我有一个可视化的c ++项目,可以创建一个dll。
对于这个项目,我有一个正常的CMakeLists.txt。
现在,我创建了两个cuda源文件,它们可以完成项目并
使用Visual Studio,构建效果很好。
我想将匹配的命令添加到我的cmake文件中。
谁能告诉我我需要添加的基本命令?
我尝试建立一个使用.cu和.cpp文件的dll库...。
我的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})
但是它不会使用正确的标志来编译cuda文件。
同样在Visual Studio中,预处理器定义也位于属性的cuda部分中。
最佳答案
我将尝试使用评论中的讨论来回答这个问题,并添加一些其他信息。
首先,有两种方法可以在CMake中启用CUDA支持。一个是旧的 FindCUDA
module,另一个是CMake 3.8中添加的新的内置CUDA语言支持,并解释了here。
您可以选择其中一个(但是您可能要使用对新项目的内置支持),但是随后您必须坚持选择。
要使用内置支持,您可以将其添加到project(...)
语句中或使用:
enable_language(CUDA);
要使用旧的
FindCUDA
包,请使用:find_package(CUDA);
请注意,这两个选项使用完全不同的变量进行设置。要查看
FindCUDA
支持哪些变量,请参见this page;对于内置CUDA支持,请参见this(不要忘记<LANG>
占位符可以用任何语言替换,这意味着CUDA
也是可用的替代方法之一)。例如。使用
FindCUDA
,您将使用CUDA_NVCC_FLAGS
手动设置编译器标志,而使用内置语言支持,则将CMAKE_CUDA_FLAGS
用于相同的目的。根据经验:如果变量以CUDA_
开头,则它是FindCUDA
包的一部分;如果变量以CMAKE_
开头,则它是内置支持的一部分。关于cmake - CUDA CMake 3.10 CMakeLists.txt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49767485/