Как запустить реконфигурацию CMake от цели?

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

- 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

Решение

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

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

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

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector