2014-12-03 75 views

回答

11

在當前CMake的釋放:

一些錯誤檢查add_dependencies導致調用Target->AddUtility()後。 x被添加到utilities的列表中my-lib

target_link_libraries不會導致對AddUtility的調用,但它會將參數添加到LINK_LIBRARIES目標屬性中。

後來,LINK_LIBRARIES目標屬性的內容和實用程序列表都用於計算目標在cmComputeTargetDepends中的依賴關係。

目標中的實用程序列表在配置時無法查詢,並且僅在生成時使用,因此使用add_dependencies以及已添加的庫參數是target_link_libraries是多餘的。

-1

它用於頂級目標相互依賴的情況。也就是說,如果X爲您添加到您的項目(在頂層),一個東西與

add_library(x x.c y.c z.c) 

你要告訴CMake的它。你可以用add_dependencies這樣做。

+0

我沒有downvote鏈接,但我的問題的關鍵是** add_dependencies是否**是_redundant_ ** target_link_libraries後**。 – 2014-12-04 08:53:24

+0

好吧,我明顯得到了這個錯誤。無論如何,我不可能像@seveire那樣深入地評論,所以非常感謝。 – sebkraemer 2015-01-19 12:38:48

1

我不知道在什麼特別的你是有趣......

但從概念點 - 我認爲你是對是字節

的廢物來看 cmake的文檔點 - 你應該更喜歡這樣做,以保證正確的構建順序

根據文檔target_link_libraries,add_dependencies概念在意識形態分裂。分裂depencies和鏈接器選項的 這樣的想法,也堅持在Makefile文件格式GNU make工具

target_link_libraries

..Specify庫或標誌鏈接給定的目標時使用..

add_dependencies

...讓頂級依賴於其它頂級目標,以確保 ,他們之前建立...

在現代的cmake從3。*您可以省略add_dependencies,如果你將執行與別名目標

add_library(fooLib 1.cpp 2.cpp) 
add_library(my::fooLib ALIAS fooLib) 
... 
target_link_libraries(fooBin my::fooLib) 
相關問題