2011-03-21 40 views
11

我正在使用CMake來構建我的C++項目,它具有多個可執行文件和庫(同一項目的所有部分)。所有工作都很好,但是我的一個可執行文件是創建一些庫類的代碼生成器。我已經掌握了所有這一代人的工作,但是在構建庫之前無法弄清楚如何調用這個可執行文件(codegen)。我在Linux環境中。希望有人能回答這個問題。獲得CMake在構建庫之前執行項目中的目標

回答

17

CMakeLists.txt

首先,定義你的可執行文件:

add_executable(marks-code-generator gen.cpp) 

然後,定義自定義命令生成源:

add_custom_command(OUTPUT generated.cpp generated.hpp 
        COMMAND marks-code-generator ARGS args here maybe 
        MAIN_DEPENDENCY input-file.in 
        DEPENDS marks-code-generator 
        COMMENT here we go! 
        VERBATIM) 

選項VERBATIM確保特定平臺轉義正確完成。 COMMENT將在執行時打印出來,給出類似[ 66%] here we go!的東西。

最後,命名源列表中生成的源爲您真正的程序:

add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp) 
+0

感謝傑克, 應該標記代碼生成器編寫generated.cpp/h的文件到當前目錄或簡單的將他們輸出標準輸出並讓OUTPUT部分寫入它們?如果是這樣,我只是在寫作時將它們與EOF分開? – Mark 2011-03-22 10:04:54

+0

我越來越認爲遞歸構建系統不起作用。他們不使用'make',他們不使用'automake',我不相信他們使用'CMake'。是否有任何理由不能在頂層的'CMakeLists.txt'中完成這一切?如果它太大,使用'include'。 您仍然需要輸出到文件。 'add_custom_command'中的'OUTPUT'行只是告訴CMake你正在生成的文件(因爲它沒有辦法獨立工作),所以繼續使用'ofstream'或其他來產生你的頭文件和源文件。 – 2011-03-22 10:59:15

+0

謝謝傑克,我會考慮移動到一個CMakeLists,看起來會更容易維護等。 – Mark 2011-03-22 11:06:00

相關問題