假设我有一个文件,我们称之为foo.cpp
,我的目标是在 cuda 模式下使用nvcc编译此文件。从命令行可以通过调用:
nvcc --x=cu foo.cpp
我正在努力的是让CMake完成同样的事情。事实证明,CMake命令cuda_add_executable(foo foo.cpp)
将过滤* .cpp文件并使用c ++编译器(而不是nvcc)。
请注意,将所有文件重命名为* .cu不是一个选项,因为代码库也必须支持非cuda版本。
答案 0 :(得分:5)
在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
标志。不幸的是,它不起作用。原因可能是该级别的设置范围不大,因为它会影响所有文件。