Clang++ 和 `-fuse-ld=gold` 导致许多未使用的选项警告

Sva*_*zen 3 cmake compiler-warnings clang++

我正在尝试在项目中使用gold链接器。如果我只是这样做clang++CMake

add_definitions(-fuse-ld=gold)
Run Code Online (Sandbox Code Playgroud)

我以以下形式收到大量警告:

clang: warning: argument unused during compilation: '-fuse-ld=gold'
Run Code Online (Sandbox Code Playgroud)
  • 该选项实际上有效吗?
  • 我应该在我的CMake脚本中的哪里添加它以避免到处都有警告?

Tsy*_*rev 7

由于该选项用于链接阶段,请将其添加到链接器标志,而不是编译器标志。例如,您可以设置变量CMAKE_EXE_LINKER_FLAGS

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
Run Code Online (Sandbox Code Playgroud)

请注意,CMake 为不同的输出类型分离了与链接器相关的变量。变量CMAKE_EXE_LINKER_FLAGS仅影响链接可执行文件( add_executable())。对于库使用适当的CMAKE_*_LINKER_FLAGS变量:

  • CMAKE_STATIC_LINKER_FLAGS - 用于STATIC
  • CMAKE_SHARED_LINKER_FLAGS - 用于共享
  • CMAKE_MODULE_LINKER_FLAGS - 用于MODULE s。

  • 编译器不是调用链接器吗?该选项用于*选择*链接器,而不是传递给它。事实上, `clang++ -fuse-ld=gold -Wl, --version` 正确地报告了 `gold` 版本,而 `clang++ -Wl,-fuse-ld=gold -Wl,--version` 将报告 `ld`,这意味着 `clang++` 没有调用 `gold`。 (3认同)