CMake 将 C++ 参数传递给 nvcc

CMake passes C++ arguments to nvcc

我正在从事一个混合了 C++ 和 CUDA 的项目。另外它 links 3rd party 库,具体我们怀疑这个问题来自 aws-sdk-c++.

问题是,当我们 link 针对我们使用 AWS 的库时,一个 -pthread 标志被添加到我们目标的编译选项中。我们的目标项目有 .cpp.cu 文件,所以当 nvcc 编译并且标志从主机传播到设备编译时,我们得到

nvcc fatal : Unknown option 'pthread'

环顾四周,这个问题发生了很多次,问题是它的解决方案通常是使用旧的 CMake,它使用 CUDA_ADD_LIBRARY 问题不会发生,可以设置 CUDA_PROPAGATE_HOST_FLAGS=OFF 来解决这个问题,或者在生成器表达式中指定有问题的 pthread 标志,例如

add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${my_cxx_flags}>")
add_compile_options("$<$<COMPILE_LANGUAGE:CUDA>:${my_cuda_flags}>")

(摘自 this 回答) 这对我们来说不是一个选择,因为我们自己不包括 pthread 标志,而是通过我们 link 反对的第三方。

所以我猜我的问题是,现代 CMake 中是否有一种方法可以防止主机标志传播到 nvcc,或者可能从 nvcc 中删除特定标志,因为我们知道是什么导致了我们的问题。

或允许我们在库中使用 nvcc 编译 CUDA 文件的任何其他解决方案 links 针对 pthread

看起来 CMake 与 CUDA 10.0 混合存在错误。 按照建议升级到 CMake 3.17.3 here 直到我升级到 CUDA 10.2 才解决问题,在这种情况下 CMake 3.17.3 工作