现代CMake(3.8+)-FindCUDA已弃用,非.cu文件呢

Modern CMake (3.8+) - FindCUDA deprecated, what about non .cu files?

本文关键字:cu 文件 CMake -FindCUDA 现代      更新时间:2023-10-16

我有一个基于CMake的C++/CUDA项目。目前我正在使用CMake 3.11和CUDA 9.0,我读到现在CUDA是CMake中的一流语言,所以我可以简单地添加.cu文件,它会自动调用NVCC编译器来处理它们。在此之前,我们必须使用find_package(CUDA)等,但现在这是一个不推荐使用的功能

现在的问题是:我们如何编译仍然使用CUDA主机库的普通.cpp文件?cudaMalloccudaFree等。到目前为止,我的解决方案是set_source_files_properties(file.cpp PROPERTIES LANGUAGE CUDA),但我觉得这不是正确的做法。由于该文件不包含设备代码,因此应该使用GCC编译器进行编译,包括并链接到CUDA库。

这种方法的另一个问题是,它很快就会传播到项目的其余部分。假设一个头文件定义了一个包含dims3变量的结构,那么#include这个头的每个.cpp文件都需要被视为CUDA文件。

我们如何编译仍然使用CUDA主机库的普通.cpp文件?

使用常规C++编译器。没有必要将它们视为CCD_ 10。

我最近在我的这个存储库中切换到了CMake的原生CUDA支持。我现在有:

add_executable(device_management 
EXCLUDE_FROM_ALL examples/by_runtime_api_module/device_management.cpp)
add_executable(execution_control 
EXCLUDE_FROM_ALL examples/by_runtime_api_module/execution_control.cu)

这两个都使用运行时API(实际上,他们使用我的C++化包装器,它使用运行时API-但大多数包装器都只是头(,但第二个包装器中有一个内核,所以我将其作为.cu,并由CUDA编译。.cpp通过简单的旧GCC构建并运行良好。