add_custom_command для файлов xml - PullRequest
0 голосов
/ 16 ноября 2010

наша система использует некоторые XML-файлы для генерации кода.Поэтому я создал собственную команду для сканирования и анализа этих файлов, а также для генерации данных в соответствии с требованиями.Это то, что я сделал:

file(GLOB BEAN_XML_FILES "../../*.xml")

add_custom_command(TARGET communication PRE_BUILD
                   COMMAND python
                   ARGS bean_maker.py --input-directory ${SOURCE_DIR}/docs/beans --output-directory ${SOURCE_DIR}/beans
                   WORKING_DIRECTORY ${SOURCE_DIR}/tools/bean_maker
                   COMMENT "Running bean maker..."
                   DEPENDS ${BEAN_XML_FILES})

Проблема в том, что add_custom_command запускается только при запуске cmake, даже если я изменил какой-то xml внутри папки.

Как мне это сделать, чтобы запуститькогда вносятся изменения в файлы?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2010

Используйте подпись add_custom_command для добавления пользовательской команды для создания выходных файлов.

add_custom_command(OUTPUT ${GENERATED_SOURCE_FILES}
                   COMMAND command1 [ARGS] [args1...]
                   DEPENDS ${BEAN_XML_FILES})

Во время сборки команда будет выполняться, если сгенерированные файлы старше, чем файлы, от которых они зависят.

0 голосов
/ 16 ноября 2010

Проблема в том, что ваша пользовательская команда запускается только тогда, когда цель должна быть скомпилирована.Вам нужно сделать так, чтобы в CMake цель перекомпилировалась каждый раз, когда вы изменяете один из этих XML-файлов.

Вот два варианта:

  1. Установить декадент, который всегда меняется(системное время, инкрементная переменная)
  2. Создайте вторую пользовательскую команду, которая записывает время последнего изменения всех файлов xml в файл в каталоге сборки.Зависит от этого файла, и ваша целевая перекомпиляция будет видна только после изменения XML-файла.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...