我正在编写一些可以编译为C++或CUDA的代码。在后一种情况下,它使用CUDA内核,在前一种情况下,它只运行常规代码。
创建名为test.cpp的文件后,我可以手动进行编译:
g++ test.cpp # build as C++ with GCC
nvcc -x cu test.cpp # build as CUDA with NVCC
-x cu
表示告诉 nvcc,尽管它是 .cpp 扩展名,我想让它将其视为 CUDA。至此一切顺利。
然而,当我迁移到使用 CMake 时,我不知道如何做同样的事情。也就是说:如何要求 CMake 使用 NVCC 编译 .cpp 文件,而不是 GCC。
cmake_minimum_required(VERSION 3.9)
project(cuda_test LANGUAGES CUDA CXX)
add_executable(cuda_test test.cpp) # builds with GCC
如果我创建了一个指向原始文件的符号链接:
ln -s test.cpp test.cu
然后修改CMakeLists.txt:
add_executable(cuda_test test.cu) # builds with NVCC
但我希望能够在CMake中指定NVCC的-x
开关的等效项,而不是玩弄扩展名。类似于:
set_target_properties(cuda_test PROPERTIES FORCE_LANGUAGE CUDA)
甚至可以
set_target_properties(test.cpp PROPERTIES FORCE_LANGUAGE CUDA)
这样的咒语存在吗?
set_source_file_properties(test.cpp PROPERTIES LANGUAGE CUDA)
。 - Tsyvarevtarget_compile_options(cuda_test PRIVATE "-x cu")
,该标志将传递给GCC而不是NVCC。 - Edd Inglis