CMake将C++参数传递给nvcc

4

我正在开发一个同时使用C++和CUDA的项目,此外还链接了第三方库,特别是我们怀疑问题来自于 aws-sdk-c++

问题在于当我们链接使用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}>")

(来源于这里的答案) 对我们来说,pthread选项不可行,因为我们是通过第三方库进行链接而不是直接包含pthread标志。
所以我猜我的问题是,在现代CMake中是否有一种方法可以防止主机标志传播到nvcc,或者从nvcc中删除特定的标志,因为我们知道什么导致了我们的问题。
或者任何其他解决方案,使我们能够在链接了pthread的库中使用nvcc编译CUDA文件。
1个回答

4

看起来CMake与CUDA 10.0混合使用存在一个bug。 按照这里建议的升级到CMake 3.17.3并没有解决问题,只有当我升级到CUDA 10.2时,CMake 3.17.3才能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接