Cuda CMake 3.10 CMakeLists.txt

时间:2018-04-11 05:54:52

标签: cmake cuda

我有一个可视化的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})

但它没有用正确的标志编译cuda文件。 同样在visual studio中,预处理器定义也在属性的cuda部分....任何建议?

1 个答案:

答案 0 :(得分:5)

我会尝试使用评论中的讨论来回答这个问题,并添加一些额外的信息。

首先,有两种方法可以在CMake中启用CUDA支持。一个是旧的FindCUDA module,另一个是在CMake 3.8中添加的新的内置CUDA语言支持,并解释了here。 您可以选择其中一个(但您可能希望使用内置的新项目支持),但是您必须坚持自己的选择。

要使用内置支持,您可以将其添加到project(...)语句或使用:

enable_language(CUDA);

要使用旧的FindCUDA包,您可以使用:

find_package(CUDA);

请注意,这两个选项使用完全不同的变量进行设置。要查看FindCUDA支持哪些变量,请参阅this page,并了解内置CUDA支持,请参阅this(不要忘记<LANG>占位符可以替换任何语言,这意味着CUDA也是可用的替换之一。)

E.g。使用FindCUDA,您将使用CUDA_NVCC_FLAGS手动设置编译器标志,并且通过内置语言支持,您可以将CMAKE_CUDA_FLAGS用于相同目的。根据经验:如果变量以CUDA_开头,则它是FindCUDA包的一部分,如果它以CMAKE_开头,则它是内置支持的一部分。