У меня есть следующие настройки:
- 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}
)
Есть ли способ вызвать перенастройку после запуска этого скрипта?
Я попытался использовать следующее без какого-либо успеха:
Почему не execute_process
Работа?
Мне кажется, это должно работать, если вы используете execute_process
(не add_custom_command
) запустить конан /reconfigure.py
перед любой из логики CMake, которая зависит от его вывода, в сочетании с добавление входных файлов этой команды в CMAKE_CONFIGURE_DEPENDS
.
Пытаясь что-то запустить до CMake не будет работать … но вам все равно не нужно этого делать. Я думаю, что ваша проблема в том, что вы пытаетесь решить не тот вопрос. Вместо этого посмотрите на это как на в течение Выполнение CMake, и б) вы хотите перезапустить CMake если ваш «conanfile» изменится. Повторный запуск CMake перезапустит conan.
Других решений пока нет …