我正在编写一些可以编译为 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 而不是 GCC 编译 .cpp 文件。
cmake_minimum_required(VERSION 3.9)
project(cuda_test LANGUAGES CUDA CXX)
add_executable(cuda_test test.cpp) # builds with GCC
如果我创建一个指向原始文件的符号链接(symbolic link):
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)
有这样的咒语吗?
最佳答案
默认情况下,CMake 根据文件的扩展名为源文件选择编译器。但是你可以通过设置 LANGUAGE 来强制 CMake 使用你想要的编译器。文件属性:
set_source_files_properties(test.cpp PROPERTIES LANGUAGE CUDA)
(这只是使用普通编译器选项为文件调用 CUDA 编译器。您仍然需要为该编译器传递额外的选项,以便它可以处理不寻常的文件扩展名。)
关于c++ - 如何使用 CMake 将 C++ 编译为 CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861467/