Добавить пользовательский шаг сборки в 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.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})

13

Решение

Для меня с чем-то похожим я просто использую:

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.

Может быть, поэтому это не работает для вас.

Обход может быть (немного некрасиво):

  • Создать фальшивый проект
  • Добавьте вашу собственную команду как POST_BUILD
  • Сделать ваш текущий проект зависимым от поддельного
14

Другие решения

Я использую это так:

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.

3