2015-07-10 67 views
0

如何編寫接受不同源外構建的CMakeLists.txt文件?我不是在談論調試和發佈,但更多關於像一個版本的東西遠程測試一個本地測試等。如何告訴cmake爲out-of-source-builds生成不同的默認目標?

例如:如果我進入build_local建立目錄並運行make我想有爲當地移民彙編的資料。如果我在build_production構建目錄中運行make,我想使用不同的配置編譯源代碼。我明白,源代碼構建是我需要的。我只是不太明白如何:

  1. 告訴cmake的產生什麼樣的配置
  2. 如何寫一個CMakeLists.txt文件的方式,它會產生不同的默認目標(例如,cd build_local; cmake -D local?) (即make allmake),具體取決於配置

是否有人有示例或適當文檔的鏈接?

謝謝!

+0

您可以爲每個配置建立一個構建目錄。但你必須手動完成。 – usr1234567

回答

2

使用if命令,您可以填寫默認具有不同含義的目標(和其他),具體取決於配置。

的CMakeLists.txt

... 
option(LOCAL "Build local-testing project" OFF) 
if(LOCAL) 
    add_executable(program_local local.c) 
else() 
    add_executable(program_remote remote.c) 
endif() 

本地構建:

cd build_local 
cmake -DLOCAL=ON .. 
make 
... 

遠程構建:

cd build_remote 
cmake .. 
make 

if分支你甚至可以使用不同的add_subdirectory()命令,所以你的配置項目對於不同的配置可能會完全不同。

+0

謝謝,那就是我正在尋找的一個問題仍然存在,但我該如何設置默認目標?假設我有幾個自定義目標(即通過'add_custom_target'或'add_custom_command'),並且我想根據配置將其中一個作爲'make all'的默認值?謝謝。 –

+1

'add_custom_target(local_target $ {LOCAL_TARGET_TYPE} ...)'。如果你想用'make all'來執行'LOCAL_TARGET_TYPE',那麼應該把'LOCAL_TARGET_TYPE'設置爲'ALL'。否則它可能未定義。 – Tsyvarev

+0

就是這樣。謝謝! –

相關問題