2013-03-14 47 views
5

在我們的項目中,我們想要使用第三方庫(A),它是使用自動工具創建的,它生成一個對象文件(B),我們需要一個庫(C)的鏈接時間。使用cmake,如何將由external_project語句構建的目標文件鏈接到另一個庫中?

external_project(
    A 
    ... 
) 
set_source_files_properties(B PROPERTIES DEPEND A) 
add_library(C ... A) 
add_dependency(C B) 

我的印象中,這應該做的伎倆,但CMake的命令時指出,對檢查過程中add_library無法找到文件中的失敗。

任何修補程序或替代解決方案將不勝感激! (更改第三方庫不是一個選項) 謝謝!

回答

3

有幾個問題在這裏:

除了這4條線是一切OK :-)

所以問題在於你想要在add_library調用中包含目標文件B,但它不會在configure-time(調用CMake時)時可用,僅在編譯時。

我認爲你將不得不做這樣的事情:

ExternalProject_Add(
    A 
    ... 
) 

set_source_files_properties(
    ${B} PROPERTIES 
    EXTERNAL_OBJECT TRUE # Identifies this as an object file 
    GENERATED TRUE # Avoids need for file to exist at configure-time 
) 

add_library(C ... ${B}) 
+0

非常感謝,完美的答案! (我不打算寫出有效的cmake代碼,但可能會更清晰;)) – 2013-03-15 07:54:57

+0

@Fraser對不起,但我不明白....這個「$ {B}」來自哪裏? – 2017-07-29 17:56:52

+0

@RaulLuna在原始問題中,OP提到有一個他稱爲「B」的對象文件 - 我假設它在CMakeLists.txt中定義爲一個變量 – Fraser 2017-07-29 22:26:15

相關問題