我有以下库lib_A, lib_B, lib_C, lib_D. 我在我的 CMake 文件中做这样的事情(顺序很重要):
ADD_LIBRARY(lib_A)ADD_LIBRARY(lib_B)ADD_LIBRARY(lib_C)ADD_LIBRARY(lib_D)TARGET_LINK_LIBRARIES(lib_B lib_C)TARGET_LINK_LIBRARIES(lib_A lib_B)ADD_EXECUTABLE(Exec)TARGET_LINK_LIBRARIES(exec lib_A)TARGET_LINK_LIBRARIES(exec lib_D)
这导致以下链接器命令。
linker -llib_A -llib_D -llib_B -llib_C
Q1。为什么是lib_B和lib_C之后lib_D?
Q2。当我稍微更改 CMake 并执行以下操作时:
TARGET_LINK_LIBRARIES(lib_A lib_D)TARGET_LINK_LIBRARIES(exec lib_A)
那么链接顺序是这样的:
linker -llib_A -llib_B -llib_C -llib_D
这里lib_B和lib_C之前lib_D。这意味着target_link_libraries可执行目标和库目标的工作方式不同。我对吗?
这里的问题是lib_Bandlib_C也取决于lib_D,但我不想制作target_link_libraries(lib_B lib_D)and target_link_libraries(lib_C lib_D),因为我有更多这样的情况,我必须为每个库手动完成。当然,在第二季度这样做可以解决问题,但是:
Q3 - 这个订单是由 CMake 以某种方式保证的还是只是偶然?
谢谢