2012-11-14 43 views
5

如何配置/破解cmake以構建使用add_executable()添加的特定可執行文件,但不安裝它?cmake在安裝過程中排除可執行文件

可執行文件是一個單元測試,最終將使用add_test進行處理,但現在我只想將測試二進制文件從儘可能少的版本中刪除。

感謝

回答

4

CMake的,如果你申請的install功能給它,即只能安裝一個可執行的目標:

install(TARGETS ExecutableTest RUNTIME DESTINATION "bin") 

爲了防止ExecutableTest安裝了Release構建,加CONFIGURATIONS限制:

install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" CONFIGURATIONS Debug) 

或者,您也可以使ExecutableTest運佐丹奴國的目標,這是默認情況下不建:

add_executable(ExecutableTest EXCLUDE_FROM_ALL ${ExecutableTestFiles}) 

然後有選擇地只安裝ExecutableTest如果已經明確建:

install(TARGETS ExecutableTest RUNTIME DESTINATION "bin" OPTIONAL) 

所有可選測試目標可在超目標彙集到允許在一個步驟中創建這些文件:

add_custom_target(MyTests DEPENDS ExecutableTest ExecutableTest2 ExecutableTest3) 
+0

我需要它Debug和Release,所以首先建議

make all_but_tests && make install

每次,雖然可行韓元」工作。具有可選目標的那個似乎正是我想要的,我會在一秒之內嘗試一下,然後很快就會給出這個答案。 – bobah

+0

#2確實阻止了測試的構建,有沒有辦法將所有這些可選目標分組爲可以說「make mytests」? – bobah

+0

查看更新的答案。 – sakra

3

由於EXCLUDE_FROM_ALL有undefined behavior if combined with INSTALL(cmake的試圖警告你,它不一樣,如果OPTIONA關係L設置),保證工作的解決方案更加複雜。

您應該:

然後(假設使用的是做,但也可用於忍者):

  • 您可以撥打make install觸發make all_but_tests,並在內置完成後安裝。

  • 您可以撥打make my_tests,然後make install,在這種情況下,它會安裝一切。您可以連接命令這樣

    make my_tests && make install

    ,或者因爲沒有在這種情況下區別:

    make [all] && make install

我被這個問題所吸引,因爲我最近不得不面臨類似的問題:Installing only one target and its dependencies

編輯:

add_dependency(install all_but_tests)可能會not work

所以,要麼你use an adequate workaround,或者你叫你要安裝 「all_but_tests」

相關問題