2013-08-25 31 views
10

我試圖在CMake中添加一個生成一些文件的自定義生成步驟。我還沒有找到它的工作原理。在CMake中添加自定義生成步驟

我有一個項目來源,頭文件&必須由ODB爲C++生成實現文件。 ODB將類頭文件作爲參數並生成我想在我的項目中使用的源文件。

現在,我已經在我的CMakeLists.txt以下命令:

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
    DEPENDS ${PROJECT_NAME} 
    VERBATIM 
) 

對於文件person.hpp ODB應該產生person-odb.hxxperson-odb.cxxperson-odb.ixx但我特地使用不會產生任何東西CMake的命令。在終端這個命令工作正常。

我在做什麼錯?

編輯:這個問題可以通過添加以下行來解決:

set(FAKE_TARGET fakeTarget) 
add_custom_target(fakeTarget 
    odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate-query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 
add_dependencies(${PROJECT_NAME} ${FAKE_TARGET}) 

回答

14

對於我來說,有類似的東西,我只是用:

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 

我們不使用DEPENDSVERBATIM

DEPENDS選項指定只有在創建此選項的項目之後才能執行該命令。

編輯:

注意,PRE_BUILD選項僅支持的Visual Studio 7或更高版本。對於所有其他生成器,PRE_BUILD將被視爲PRE_LINK。

也許這就是爲什麼它不適合你。

一個解決可能是(有點難看):

  • 創建一個假項目
  • 就可以添加自定義命令POST_BUILD
  • 讓你當前的項目取決於假的
+0

當我刪除'DEPENDS'和'VERBATIM'時,它仍然不起作用。 –

+0

@DavidBulczak看看我的編輯。我在工作中使用VS,這就是爲什麼它在爲我工作。 –

+0

好的。謝謝。我使用gcc/make和其他GNU工具。 有沒有其他方法可以在CMake中添加自定義預構建步驟? –

1

辦法,我使用它是:

add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    COMMAND xsltproc --output ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp ${CMAKE_SOURCE_DIR}/xml/genictabc.xslt ${CMAKE_SOURCE_DIR}/xml/icminstr.xml 
) 

add_executable(
    du4 

    ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    . 
    . 
    . 
) 

關鍵是將甚至.hpp文件添加到add_executable塊中。

相關問題