2017-04-26 9 views
1

我正在尝试在CMake项目中使用gold链接器和clang++。如果我只是做Clang ++和`-fuse-ld = gold`导致许多未使用的选项警告

add_definitions(-fuse-ld=gold) 

我得到吨警告形式:

clang: warning: argument unused during compilation: '-fuse-ld=gold' 
  • 是期权实际工作?
  • 我应该在哪里添加它在我的CMake脚本中以避免在各处发出警告?

回答

3

由于选项是链接阶段,将其添加到连接标志,不给编译的。 E.g,你可以通过设置变量CMAKE_EXE_LINKER_FLAGS

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") 

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

  • CMAKE_STATIC_LINKER_FLAGS - 为STATIC
  • CMAKE_SHARED_LINKER_FLAGS - 为SHARED
  • CMAKE_MODULE_LINKER_FLAGS - 为模块秒。
+0

不是编译器调用链接器?该选项用于*选择*链接器,不传递给它。实际上,'clang ++ -fuse-ld = gold -Wl,--version'正确报告'gold'版本,而'clang ++ -Wl,-fuse-ld = gold -Wl, - version'会报告'ld',这意味着'clang ++'不会叫'黄金'。 – Svalorzen

+0

是的,CMake(默认情况下)为**链接阶段**调用编译器。但*链接器在编译阶段无关*。你得到的警告信息意味着:编译时忽略链接器选项。当你用'-Wl,--version'请求版本时,你得到*版本的链接器*;当然,在这种情况下,存在/不存在'-fuse-ld = gold'有一定的意义。 – Tsyvarev