假设我有一个文件,我们称它为 foo.cpp
,我的目标是在 cuda 模式下用 nvcc 编译这个文件。在命令行中,这可以通过调用轻松完成:
nvcc --x=cu foo.cpp
我正在苦苦挣扎的是让 CMake 做同样的事情。事实证明,CMake 命令 cuda_add_executable(foo foo.cpp)
将过滤 *.cpp 文件并使用 c++ 编译器(而不是 nvcc)。
请注意,将所有文件重命名为 *.cu 不是一种选择,因为代码库还必须支持非 cuda 构建。
最佳答案
在FindCUDA source code我找到了一个选项来为特定的非 .cu
文件激活 CUDA 编译。尽管似乎缺少文档(在源代码之外)。
您可以在每个文件级别上设置 CUDA 编译
set_source_files_properties( foo.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ )
CMAKE 3.3 或更高版本。
其余照常工作:
cuda_add_executable(foo foo.cpp)
实际上,我希望有一个简单的解决方案,比如使用 CUDA_NVCC_FLAGS
或 cuda_add_executable( ... OPTIONS --x=cu )
来传递 - -x=cu
标志。不幸的是,它不起作用。原因可能是该级别的设置范围没有用,因为它会影响所有文件。
关于c++ - CMake + 库达 : compile cpp files in Cuda-mode (--x=cu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021233/