11
我正在使用CMake來構建我的C++項目,它具有多個可執行文件和庫(同一項目的所有部分)。所有工作都很好,但是我的一個可執行文件是創建一些庫類的代碼生成器。我已經掌握了所有這一代人的工作,但是在構建庫之前無法弄清楚如何調用這個可執行文件(codegen)。我在Linux環境中。希望有人能回答這個問題。獲得CMake在構建庫之前執行項目中的目標
我正在使用CMake來構建我的C++項目,它具有多個可執行文件和庫(同一項目的所有部分)。所有工作都很好,但是我的一個可執行文件是創建一些庫類的代碼生成器。我已經掌握了所有這一代人的工作,但是在構建庫之前無法弄清楚如何調用這個可執行文件(codegen)。我在Linux環境中。希望有人能回答這個問題。獲得CMake在構建庫之前執行項目中的目標
在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)
感謝傑克, 應該標記代碼生成器編寫generated.cpp/h的文件到當前目錄或簡單的將他們輸出標準輸出並讓OUTPUT部分寫入它們?如果是這樣,我只是在寫作時將它們與EOF分開? – Mark 2011-03-22 10:04:54
我越來越認爲遞歸構建系統不起作用。他們不使用'make',他們不使用'automake',我不相信他們使用'CMake'。是否有任何理由不能在頂層的'CMakeLists.txt'中完成這一切?如果它太大,使用'include'。 您仍然需要輸出到文件。 'add_custom_command'中的'OUTPUT'行只是告訴CMake你正在生成的文件(因爲它沒有辦法獨立工作),所以繼續使用'ofstream'或其他來產生你的頭文件和源文件。 – 2011-03-22 10:59:15
謝謝傑克,我會考慮移動到一個CMakeLists,看起來會更容易維護等。 – Mark 2011-03-22 11:06:00