Самостоятельное обновление включенного файла cmake: перезагрузка файла include () - ed - PullRequest
0 голосов
/ 03 февраля 2020

Я работаю над чистым проектом 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 работает внутренне в отношении переменных и областей (хотя на самом деле существует только одна область действия) здесь) или как это может вызвать это, или если есть более надежный способ, которым я могу использовать для достижения этой "перезагрузки".

У кого-нибудь есть идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...