Я работаю над чистым проектом cmake, который в какой-то момент нуждается в обновлении. Команда, которая обновляет его, выглядит следующим образом:
set(gitache_need_include TRUE)
execute_process(COMMAND ${git_executable} checkout ${GITACHE_CORE_SHA1}
WORKING_DIRECTORY ${GITACHE_CORE_SOURCE_DIR}
RESULT_VARIABLE _result_error
OUTPUT_QUIET
ERROR_QUIET
)
return()
Этот git checkout
перезаписывает файл .cmake
, который мы выполняем в настоящее время. Итак, после этого я хочу оставить этот файл и include()
снова. Я просто устанавливаю gitache_need_include
в значение ИСТИНА для достижения этой цели (include()
не запускает новую область).
Файл CMakeLists.txt
, который включает в себя вышеуказанный файл, выглядит следующим образом:
set(gitache_need_include TRUE)
while (gitache_need_include)
set(gitache_need_include FALSE)
include("${GITACHE_CORE_DIR}/source/main.cmake")
endwhile ()
Странно то, что это работает и выключается ... Кажется, что как только это работает, это работает (?), Но иногда после небольшого изменения в файле (файлах) .cmake он перестает работать. Например, в какой-то момент это не сработало - тогда я добавил в код один комментарий , и затем он заработал, затем я снова удалил этот комментарий, а затем он все еще сработал ?!
Здесь «не работает» означает, что после возврата из include()
переменная gitache_need_include
равна FALSE
, в то время как «работа» означает, что она все еще TRUE
, как было установлено в include()
-ed файл. Кажется, основная проблема заключается в надежной передаче значения обратно из включенного файла в файл, который его включал.
Я не уверен, как cmake работает внутренне в отношении переменных и областей (хотя на самом деле существует только одна область действия) здесь) или как это может вызвать это, или если есть более надежный способ, которым я могу использовать для достижения этой "перезагрузки".
У кого-нибудь есть идея?