【发布时间】:2021-01-02 05:54:07
【问题描述】:
假设我有一个名为 exec 的最终可执行文件,我需要将它与 2 个共享库 - libA 和 libB 链接。对于 libA,我想传递一些链接器标志,而我不希望传递其他库。
这就是我简化的 CMakeLists.txt 文件目前的样子:
add_executable(exec
main.cpp
)
target_link_libraries(exec
PRIVATE
libA
libB
)
target_link_options(exec PRIVATE "-Wl,--no-as-needed")
现在 CMake 会将其视为我将 --no-as-needed 选项传递给两个库。
我想达到这个非常严格的顺序:
-Wl,-no-as-needed -llibA -Wl,-as-needed -llibB
据我所知,CMake 不保证库会按照它们在 target_link_libraries 中写入的顺序传递给链接器,因为如果依赖关系导致顺序可能会发生变化,因此我无法编写:
target_link_libraries(exec
PRIVATE
"-Wl,-no-as-needed"
libA
"-Wl,-as-needed"
libB
)
【问题讨论】:
-
so I cannot write你试过了吗? -
是的,现在它可以工作,但是如果依赖项需要以不同的顺序将库提供给链接器,这可能会破坏事情。当然,我可能在这里错了,但是我没有在文档中找到任何其他说明。
-
I did not find anything in documentation你找到SHELL:了吗?