我有以下庫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