Modern CMake(3.8+)-不建议使用FindCUDA,非.cu文件怎么办?

时间:2018-10-30 13:03:07

标签: c++ cmake cuda deprecated

我有一个基于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变量的结构,那么.cpp这个头的每个#include文件都将被视为CUDA文件。

1 个答案:

答案 0 :(得分:1)

  

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

使用常规C ++编译器。无需将它们视为LANGUAGE CUDA

我最近在我的this repository中切换到了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构建并正常运行。