いくつかのファイルを生成するCMakeにカスタムビルドステップを追加しようとしています。どのように機能するかについての説明は見つかりませんでした。
ソース、ヘッダー、実装ファイルをODB for 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.hxx
、person-odb.cxx
、person-odb.ixx
を生成する必要がありますが、使用したCMakeコマンドは何も生成しません。端末では、このコマンドは正常に機能します。
何が悪いのですか?
[〜#〜] 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})
私にとっては、似たようなものを使って、私は単に使用します
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
オプションは、このオプションに指定したプロジェクトがビルドされた後にのみコマンドを実行する必要があることを指定します。
編集:
PRE_BUILDオプションはVisual Studio 7以降でのみサポートされていることに注意してください。他のすべてのジェネレータでは、PRE_BUILDはPRE_LINKとして扱われます。
多分それがあなたにとってうまくいかない理由です。
回避策は(少し醜い)かもしれません:
私がそれを使っている方法は:
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ブロックに追加することでした。