2016-03-15 75 views
5

假设我有一个文件,我们把它称为foo.cpp,我的目标是用nvcc编译这个文件在cuda模式。在命令行,这可以通过调用很容易地完成:CMake + Cuda:在Cuda模式下编译cpp文件(--x = cu)

nvcc --x=cu foo.cpp

我挣扎什么,是让CMake的做这同样的事情。事实证明,CMake命令cuda_add_executable(foo foo.cpp)将过滤* .cpp文件并使用C++编译器(而不是nvcc)。

请注意,将所有文件重命名为* .cu不是一个选项,因为代码库也必须支持非cuda构建。

+0

你可以尝试设置CMAKE g ++编译器并设置它的标志吗? – xhg

回答

4

FindCUDA source code中,我找到了激活CUDA编译特定非.cu文件的选项。尽管看起来缺乏文档(源代码之外)。

您可以

set_source_files_properties(foo.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ) 

CMake的3.3或更高版本,每个文件级别设置CUDA编译。

其余照常工作:

cuda_add_executable(foo foo.cpp) 

其实,我预计应该有像使用CUDA_NVCC_FLAGScuda_add_executable(... OPTIONS --x=cu)通过在不幸的是,这是行不通的--x=cu标志一个简单的解决方案。原因可能是该级别的设置范围不会有用,因为它会影响所有文件。