1

我的项目使用 cuda 内核作为一个小模块,需要 nvcc 进行编译。在编译期间,cmake 还将用于 gcc 的相同链接器和编译器标志传递给 nvcc。在我的特殊情况下,我收到以下错误。

nvcc fatal   : Unknown option 'Wl,--no-as-needed'

按照线程中接受的答案,我设法删除了需要 nvcc 的目标的编译器标志,如下所示。

get_target_property(_target_cxx_flags target_that_needs_nvcc COMPILE_OPTIONS)
list(REMOVE_ITEM _target_cxx_flags "-fcolor-diagnostics")

使用它,我避免了由于错误的编译器标志而导致的错误,如下所示:

nvcc fatal   : Unknown option 'fdiagnostics-color'

但是我不能使用相同的过程来删除链接器标志,因为get_target_property只获取编译器标志而不是链接器标志。

我正在寻找一种解决方案,仅针对一个目标编译禁用链接器标志。

预期的 cmake 最低版本是VERSION 3.0

4

2 回答 2

3

删除您不想要的标志的另一种方法是一开始就不要添加它们。您可以使用生成器表达式来指定语言。例如:

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

我意识到你问的是链接器标志而不是编译器标志,但希望这可能会让你朝着一个有用的方向前进。

于 2019-11-14T11:21:27.943 回答
2

我认为您正在寻找的是关闭标志从 gcc 到 nvcc 的传播。CUDA_PROPAGATE_HOST_FLAGS查看find cuda 模块中旧版 cuda 支持变量中的选项。

于 2019-11-14T10:51:58.790 回答