【问题标题】:CMake target_link_libraries not preserving orderCMake target_link_libraries 不保留顺序
【发布时间】:2018-02-16 09:13:13
【问题描述】:

我正在使用 CMake 3.8.2(JetBrains CLion 随附)并链接自定义项目的多个静态库。

由于我需要保留静态符号(旧版),因此我将自己的程序部分包含在 target_link_libraries(${TARGET} -Wl,--whole-archive ${MY_LIBRARY} -Wl,--no-whole-archive) 中。

这在大多数情况下都有效,但有时链接器命令会像这样:

/usr/bin/c++ -g CMakeFiles/my_exe.dir/my_exe.cpp.o -o my_exe libmy_other_lib.a -Wl,--whole-archive -Wl,--no-whole-archive

这没什么用,因为库是预先添加的,然后出现-Wl,--whole-archive -Wl,--no-whole-archive

请注意,我需要在链接 my_other_lib.a 后添加类似 -Wl,--no-whole-archive 的内容,因为我不想将此选项用于外部依赖项。

对此有什么想法吗?

【问题讨论】:

  • 看起来像一个错误。当我阅读有关此的文档时,它声称以 - 开头的库名称将保留它们的相对顺序。另一个想法 - 在你走到这一步之前,是否有其他依赖目标在同一个库中拉取?

标签: c++ cmake linker g++ clang++


【解决方案1】:

尝试将这些标志作为单个参数传递给target_link_libraries,而不是作为列表:

target_link_libraries(${TARGET} "-Wl,--whole-archive ${MY_LIBRARY} -Wl,--no-whole-archive")

【讨论】:

  • 不幸的是,现在依赖似乎完全消失了。也许我不得不提到${MY_LIBRARY} 是一个目标而不是文件的路径 - 所以我想它需要解决。
猜你喜欢
  • 2015-01-26
  • 2012-01-26
  • 2014-01-21
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多