2013-06-05 138 views
0

我打算使用CMake來構建跨平臺/交叉編譯器解決方案。試想一下,樹是這樣的:cmake:自動生成構建目錄

 
project 
    |__include 
    |__src 
    |__buildrules 

目錄buildrules將包含我的CMake的擴展和公共子項目選項加上一些腳本來啓動不同的平臺上構建(.SH .bat文件)。我打算使用相同的源樹來構建使用不同的編譯器/配置。所以在NT上我需要能夠生成用於開發的VS項目文件和用於命令行批生成的NMake makefile。在linux上,可以使用相同的樹來構建32/64變體中的不同編譯器(gcc,clang,icc)。所以buildrules不是CMake緩存的目錄。我需要爲每個不同名稱的配置/生成器(配置/生成器專用的名稱)使用不同的生成目錄。

現在幾乎每個CMake教程都以「創建構建子目錄,運行cmake,運行make」等內容開始。這對我來說似乎相當不受歡迎。我需要完全自動化的構建系統,因此可以通過「單擊」來運行。我希望能夠從buildrules(例如我的一個快捷方式批處理文件)運行一些命令,並且它應該在項目根目錄下創建正確的名稱構建目錄(如果它尚未存在),請在該目錄中運行cmake以生成緩存(如果以前沒有完成),並通過調用正確的工具開始構建:在Unix調用make,在Windows命令行調用nmake,VC解決方案啓動一個或調用批量生成等。

最重要的是我想要所有由cmake自己完成 - 我不想使用不同的平臺特定工具在其上編寫另一個可移植性級別。我可以忍受的唯一平臺特定的事情是cmake cmake.exe之間的差異。

那麼,你認爲這可以做到嗎?

我真的很感激,如果有人能幫助我這個設置。

謝謝。

回答

0

工具cmake.exe本身僅用於生成跨平臺特定的解決方案/ make文件。使用ctest.exe進行調度(1)cmake配置步驟,(2)運行構建,(3)運行單元測試,(4)將結果提交到cdash

似乎可以根據this page從cmake腳本配置ctest,但我從來沒有嘗試過。我們曾與調用後,對方這五個CTEST命令一個批處理文件的解決方案:

ctest.exe -D NightlyStart -C Release 
ctest.exe -D NightlyConfigure -C Release 
ctest.exe -D NightlyBuild -C Release 
ctest.exe -D NightlyTest -C Release 
ctest.exe -D NightlySubmit -C Release 

我知道這並不能完全回答你的問題,但希望它給出了一個方向。