我正在开发一个同时使用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文件。