我有以下库lib_A,lib_B,lib_C,lib_D。我在做类似的东西在我的cmake文件(顺序很重要):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)
这导致下面的链接器命令。
连接-llib_A -llib_D -llib_B -llib_C
Q1。为什么lib_B和lib_C在lib_D之后? Q2302。当我改变CMake的一点点,做这样的事情:
8_1 TARGET_LINK_LIBRARIES(lib_A lib_D) 9_ TARGET_LINK_LIBRARIES(EXEC lib_A)
那么连接顺序是这样的 连接-llib_A -llib_B -llib_C -llib_D 这里,lib_B和lib_C在lib_D之前。这意味着target_link_libraries对可执行目标和库目标的工作方式不同。我对吗?
这里的问题是,lib_B和lib_C也依赖于lib_D,但我不想制作target_link_libraries(lib_B lib_D)和target_link_libraries(lib_C lib_D),因为我有更多这种情况,我必须这样做手动为每个库。 当然,像第二季度一样解决问题,但是 第三季度是否这个顺序通过cmake以某种方式保证,或者它只是一个偶然?
谢谢
不知道的遭受疼痛ex和lib之间的顺序不同,但如果B和C都依赖于D,则应该真正指定它。 – Fraser
问题是B和C在逻辑上是平台独立A的一部分,而整体依赖于平台lib D.我知道我应该这样做,但我有很多这样做,并且手动完成它将做出很多努力来维护它并提供一些自动解决方案会增加基于cmake的构建系统的复杂性。另一个问题是,当我将这个D依赖项明确地设置为每个平台独立的lib时,将导致D将被列在链接器列表上很多次。 – user2301299
我有与外部库相同的问题 - 例如提升。我想避免在每个库中设置依赖关系。 – user2301299