如何使用CMake将C++编译为CUDA
How to compile C++ as CUDA using CMake
我正在编写一些可以编译为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编译器。您仍然需要为该编译器传递额外的选项,这样它就可以使用不寻常的文件扩展名。(
相关文章:
- 编译时未启用intel oneApi CUDA支持
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 编译 CUDA 与数学函数的叮当
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 如何在Visual Studio中为CUDA项目启用单独的编译
- 使用 msvc 15 在 Qt5.13 中编译 CUDA 代码
- 如何使用CMake将C++编译为CUDA
- 在窗户中编译CUDA的意义
- 编译CUDA的自定义TensorFlow OP
- 在Windows上使用clang编译CUDA时的重新定义
- 错误:在编译 cuda 的开源库 cusp 程序时需要标识符
- 在Windows上用Qt Creator编译Cuda代码
- 使用CMAKE编译CUDA C++-指定了多个编译阶段
- 为什么在 Ubuntu 下编译 CUDA 示例时找不到 libcudart.so.4
- 无法在OS X下编译CUDA驱动程序API示例
- 使用其他c++编译器编译CUDA代码
- 无法编译CUDA C源.提供了简单版本
- 使用 VS5 编译 CUDA 2012 时出现错误"nvcc cannot find a supported cl version"
- 编译CUDA文件、C文件和CUDA头文件
- md5sum值在每次编译cuda源代码时都会改变