2013-04-10 26 views
0

考慮一個依賴於外部項目的項目。在配置我的項目,我想爲用戶提供了兩個選擇:cmake外部項目:允許下載或用戶指定的路徑

  • 允許的cmake的ExternalProject工具來自動下載,配置,編譯和安裝這個外部項目
  • 允許用戶手動指定到頁眉/庫的路徑如果外部工程已經被當地建造

的想法是,如果用戶不關心,只是運行

cmake . 

然後cmake會自動執行外部項目的下載和安裝。但是,開發人員已經在他的機器上已經有本地構建的外部項目(並且未安裝),這是很常見的。爲了節省內存或便於自定義,我還希望用戶能夠手動指定(通過ccmake)該項目的頭文件和庫路徑,這將爲cmake節省下載和編譯的工作量。

有沒有一個乾淨的方式來做到這一點?

回答

1

我不確定一個整潔的方式,但它是可能的。我想像粗糙的流動會是這樣的:

add_executable(Foo ...) 

find_path(OtherProjectIncludes NAMES ...) 
find_library(OtherProjectLib NAMES ...) 

if(OtherProjectIncludes AND OtherProjectLib) 
    include_directories(${OtherProjectIncludes}) 
    target_link_libraries(Foo ${OtherProjectLib}) 
else() 
    include(ExternalProject) 
    ... 
endif() 

如果有可用於其他項目FindModule,你大概代替find_pathfind_library使用find_package

無論如何,您需要決定如何處理用戶通過路徑以尋找其他項目的現有(構建)副本的意圖,但find_xxx調用失敗。您可以繼續調用ExternalProject模塊,或者您可以提供有用的FATAL_ERROR消息並允許用戶重試。