2013-08-25 15 views
10

いくつかのファイルを生成するカスタムビルドステップをCMakeに追加しようとしています。私はそれがどのように動作するかの説明を見つけていない。CMakeのカスタムビルドステップを追加します。

ソースファイル、ヘッダー&の実装ファイルをODB for C++で生成する必要があるプロジェクトがあります。 ODBはクラスヘッダーを引数として取り、自分のプロジェクトで使用したいソースファイルを生成します。

今、私は私のCMakeLists.txtに次のコマンドを持っている:ODBはperson-odb.hxxperson-odb.cxxperson-odb.ixxを生成する必要がありますが、I''veが使用cmakeのコマンドは何も生成しないファイルperson.hppについては

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 
) 

を。端末では、このコマンドは正常に動作します。

私は間違っていますか?

EDIT:問題は、次の行追加することによって解決することができます。私にとって

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 
) 

DEPENDSまたはVERBATIM

DEPENDSオプションは、このオプションに与えたプロジェクトがビルドされた後にのみコマンドを実行するように指定します。

EDIT:PRE_BUILDオプションはわずか7以降のVisual Studioでサポートされていることを

注意。その他の発電機の場合、PRE_BUILDはPRE_LINKとして扱われます。

おそらくそれがあなたのために働いていない理由です。

周りの仕事をすることができた(ビット醜い):

  • が偽の1
  • 上の現在のプロジェクトに依存してください
  • が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ブロックに追加することでした。

関連する問題