Как запустить реконфигурацию CMake от цели? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть следующие настройки:

- build/
    - conanbuildinfo.cmake   (generated)
- conanfile.py
- CMakeLists.txt

Команда conan запускается перед CMake, генерируя conanbuildinfo.cmake.Он содержит пути включения и т. Д., Которые будут использоваться во время компиляции позже.Если я изменю conanfile, я хочу снова запустить conan и повторно запустить CMake из сгенерированной сборки ниндзя.У меня есть скрипт, который может вызвать conan, и он обновляет все правильно.Однако это происходит после запуска CMake, и хотя conanbuildinfo была изменена, CMake больше не будет работать.Это заставляет ниндзя «не видеть» изменения в графе зависимостей, поэтому он не перестраивает все, что нужно перестраивать.Это означает, что мне нужно дважды запустить ninja, чтобы все обновилось.Способ запуска перенастройки в настоящее время выглядит следующим образом:

set(DS_CONFIG_INDICATOR ${CMAKE_BINARY_DIR}/ds_configured)

add_custom_command(
  DEPENDS ${PROJECT_SOURCE_DIR}/conanfile.py
  OUTPUT ${DS_CONFIG_INDICATOR}
  COMMAND ${CMAKE_COMMAND} -E env --unset=PYTHONPATH ${PYTHON_BINARY} ${PROJECT_SOURCE_DIR}/scripts/common/reconfigure.py ${DS_CONFIG_INDICATOR} ${PROJECT_SOURCE_DIR}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
  COMMENT "Checking if reconfigure is needed"
  USES_TERMINAL
)

add_custom_target(ConanReconfigure
  DEPENDS ${DS_CONFIG_INDICATOR}
)

Есть ли способ вызвать перенастройку после запуска этого сценария?

Я попытался использовать следующее без какого-либо успеха:

  • CMAKE_CONFIGURE_DEPENDS
  • Выполнение cmake из сценария reconfigure.py
  • Прикосновение к основному CMakeLists.txt из сценария reconfigure.py
  • Использование execute_process для запуска скрипта

1 Ответ

0 голосов
/ 24 сентября 2018

Почему execute_process не работает?

Мне кажется, что это должно работать, если вы используете execute_process ( не add_custom_command) для запуска conan / reconfigure.py перед любой из логики CMake, которая зависит от его вывода, в сочетании с добавлением входных файлов этой команды в CMAKE_CONFIGURE_DEPENDS.

Попытка запустить что-то до CMake не сработает ... но вам все равно это не нужно.Я думаю, что ваша проблема в том, что вы пытаетесь решить не тот вопрос.Вместо этого посмотрите на это как a) вы хотите запустить что-то во время выполнения CMake, и b) вы хотите перезапустить CMake , если ваш «conanfile» изменится.Повторный запуск CMake перезапустит conan.

...