2013-07-24 45 views
1

我正在使用編碼合成從XSD模式部分生成項目。我已經使用了FindXSD.cmake在下面的地址有CMake的正確搜索XSD標題: http://wiki.codesynthesis.com/uploads/8/86/FindXSD.cmake.gz從CMake調用XSD

這FindXSD.cmake設置XSD_EXECUTABLE變量,我想用也產生從架構的代碼在構建任何目標之前(該項目的主要目標是圖書館),但對CMake不熟悉,我很難理解如何集成這樣的自定義命令。

這裏是我做過什麼至今:

add_library (mylibrary ${MY_PROJECT_SRC}) 

add_custom_command(TARGET mylibrary PRE_BUILD 
       COMMAND "${XSD_EXECUTABLE} cxx-tree --type-naming knr 
       -- hxx-suffix .hpp --cxx-suffix .cpp 
       ${MY_PROJECT_SOURCE_DIR}/src/model/Model.xsd") 

但它似乎並沒有做任何事情,再說,如果它這樣做,我不知道從哪裏的文件生成內容(該命令應生成Model.hpp和Model.cpp),所以我不知道要將Model.cpp編譯到目標庫和Model.hpp中,需要添加哪些命令才能被其他源文件找到。

回答

2

你可以做到這一點使用add_custom_target()ALL關鍵字:

add_custom_target(xsdgen 
        COMMAND ${XSD_EXECUTABLE} cxx-tree --type-naming knr 
        --hxx-suffix .hpp --cxx-suffix .cpp 
        ${MY_PROJECT_SOURCE_DIR}/src/model/Model.xsd) 

這將這個命令添加到的所有目標清單。現在,你需要確保這一目標將前在MyLibrary建:

add_dependencies(mylibrary xsdgen) 

還有另一種方式 - 使用add_custom_command定義生產Model.hppModel.cpp的規則。在這種情況下,CMake會爲您計算依賴關係:無論何時使用Model.{c,h}pp作爲add_{library, executable}參數,CMake都會將您的自定義命令設置爲目標的依賴關係。

這實際上是做文件生成的首選方式,因爲它允許CMake跳過已經生成的文件。相反,每次運行make時都會建立add_custom_target