如何配置/破解cmake以構建使用add_executable()添加的特定可執行文件,但不安裝它?cmake在安裝過程中排除可執行文件
可執行文件是一個單元測試,最終將使用add_test進行處理,但現在我只想將測試二進制文件從儘可能少的版本中刪除。
感謝
如何配置/破解cmake以構建使用add_executable()添加的特定可執行文件,但不安裝它?cmake在安裝過程中排除可執行文件
可執行文件是一個單元測試,最終將使用add_test進行處理,但現在我只想將測試二進制文件從儘可能少的版本中刪除。
感謝
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)
由於EXCLUDE_FROM_ALL有undefined behavior if combined with INSTALL(cmake的試圖警告你,它不一樣,如果OPTIONA關係L設置),保證工作的解決方案更加複雜。
您應該:
Remove dependency of "install" target to "all" target(有一次,在主要的CMakeLists.txt):
set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY true)
添加可選在您的測試庫INSTALL語句。注意cmake的可能的錯誤,我報告here
收集單獨所有你想要在自定義包括「all_but_tests」目標的 CMake add_custom_target depending on whole project being built(最困難的一步)
創建custom all_but_tests target:
add_custom_target(all_but_tests DEPENDS <<list of targets>>)
添加目標的依賴安裝到all_but_tests
add_dependency(install all_but_tests)
(對不起,這個我沒試過,歡迎反饋)
add_custom_target(my_tests DEPENDS <<list of tests>>)
然後(假設使用的是做,但也可用於忍者):
您可以撥打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」
我需要它Debug和Release,所以首先建議
make all_but_tests && make install
每次,雖然可行韓元」工作。具有可選目標的那個似乎正是我想要的,我會在一秒之內嘗試一下,然後很快就會給出這個答案。 – bobah
#2確實阻止了測試的構建,有沒有辦法將所有這些可選目標分組爲可以說「make mytests」? – bobah
查看更新的答案。 – sakra