CUDA CMake的3.10的CMakeLists.txt(Cuda CMake 3.10 CMa

2019-09-29 08:40发布

我有一个Visual C ++项目这将创建一个DLL。 对于这个项目,我有一个工作的CMakeLists.txt。

现在,我创建了两个CUDA源文件,这完成了项目,并与Visual Studio构建工作正常。 我想匹配的命令添加到我的cmake文件。 谁能告诉我,我需要补充的基本命令?

我尝试建立在哪里使用.CU和.cpp文件....我的CMake文件的重要组成部分,看起来像一个dll库:

# ----------------------------------------------------------------------------
# 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一部分....有什么建议?

Answer 1:

我会尽力回答使用从评论的讨论这个问题,并添加一些额外的信息。

首先,有两种方法,以使在CMake的CUDA支持。 一个是老FindCUDA模块 ,另一个是新的内置CUDA语言支持CMake的3.8加入,并解释在这里 。 您可以选择一个或另一个(但你可能需要使用新项目的内置支持),但你必须坚持你的选择。

使用内置的支持,你要么把它添加到project(...)语句或用途:

enable_language(CUDA);

要使用旧FindCUDA包,你可以使用:

find_package(CUDA);

需要注意的是两个选择使用完全不同的变量设置。 要查看变量通过支持FindCUDA看到这个页面 ,并内置支持CUDA看到这个 (不要忘记, <LANG>占位符可以用任何语言,这意味着更换CUDA也是可用的替换之一)。

例如,用FindCUDA你会用CUDA_NVCC_FLAGS手动设置编译器标志,并带有内置的语言支持,你可以使用CMAKE_CUDA_FLAGS为了同样的目的。 作为一个经验法则:如果变量开头CUDA_它是一部分FindCUDA包,如果开头CMAKE_ ,那么它的内置支持的一部分。



文章来源: Cuda CMake 3.10 CMakeLists.txt
标签: cmake cuda