如何使用CMake将C++编译为CUDA

How to compile C++ as CUDA using CMake

本文关键字:编译 CUDA C++ 何使用 CMake      更新时间:2023-10-16

我正在编写一些可以编译为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

如果我创建一个指向原始文件的符号链接:

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编译器。您仍然需要为该编译器传递额外的选项,这样它就可以使用不寻常的文件扩展名。(