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

标签 c++ cmake cuda

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

相关文章:

c++ - 关于 CUDA 中的 const 指针和参数传递

c++ - 如何为 IE 编译和构建这个 BHO?

c++ - 什么是 undefined reference / Unresolved external symbol 错误,我该如何解决?

c++ - gcov 报告的析构函数中的分支是什么?

visual-studio - 如何为 cmake 指定 git 的登录信息?

cmake - 替换 CMake 中的 AC_CHECK_LIB

c++ - 如何检测扫描文档的方向?

opencv - 在树莓派上使用cmake构建opencv时出错

c++ - 为 CUDA 实现 32 位内存集的 'right' 方法是什么?

c++ - 使用推力根据索引更改某些元素的值