Я пытаюсь добавить пользовательский шаг сборки в 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.hxx
, person-odb.cxx
, person-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})
Для меня с чем-то похожим я просто использую:
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.