gpt4 book ai didi

c++ - 如何在 CMake 中设置 --whole-archive 标志,以便所有依赖项都使用它

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:47 39 4
gpt4 key购买 nike

我有一个静态链接库(比如 libfoo)。

 add_library(foo STATIC foo.cpp)

有许多链接(使用)这个库的可执行文件。

 add_executable(myexe1 myexe1.cpp)
link_target_libraries(myexe1 foo)
add_executable(myexe2 myexe2.cpp)
link_target_libraries(myexe2 foo)
add_executable(myexe3 myexe3.cpp)
link_target_libraries(myexe3 foo)
#... and so on. (These definitions are actually scattered in the project)

现在我想对库使用 -Wl,--whole-archive 标志。似乎一种解决方案是在可执行文件端添加标志。

 add_executable(myexe1 myexe1.cpp)
link_target_libraries(myexe1 -Wl,--whole-archive foo -Wl,--no-whole-archive)

但是这样一来,每次定义链接到该库的可执行文件时,我都必须编写此代码。

有没有办法将这个标志添加到库定义端,以便在链接依赖于库的可执行文件时始终使用该标志?

最佳答案

我遇到了同样的问题,但无法阻止 CMAKE 重新排序标志和我的库。我最终做了这样的事情:

add_library(foo_actual STATIC foo.cpp)
add_library(foo INTERFACE)
set_property(TARGET foo PROPERTY INTERFACE_LINK_LIBRARIES
-Wl,--whole-archive,$<TARGET_FILE:foo_actual>,--no-whole-archive)

将您的答案与不同之处结合起来:

  • 我的 CMake 版本 (3.7) 不允许 get_property,但是 $<TARGET_FILE>运作良好并确保传播依赖关系。
  • 我用逗号把--whole-archive 、图书馆和 --no-whole-archive全部在一个参数中,因此 CMake 不会对它们重新排序。否则我无法让 CMake 不疯狂地重新排序它们。

关于c++ - 如何在 CMake 中设置 --whole-archive 标志,以便所有依赖项都使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44752899/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com