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

10-09 06:39