CMake: Как мне убедиться, что файл создан перед чтением его в переменную? - PullRequest
0 голосов
/ 21 января 2019

Я хочу прочитать текущий хеш коммита git в переменную и сгенерировать version.h из него. Эта команда зависит от моей главной цели как команды перед сборкой, потому что version.h должен быть сгенерирован перед сборкой:

# Get the current git commit
add_custom_command(
  TARGET ${MY_MAIN_TARGET} PRE_BUILD
  COMMAND git rev-parse HEAD > git-commit.txt
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

Это отлично работает. Теперь я хочу прочитать это в переменную:

file(READ "${CMAKE_BINARY_DIR}/git-commit.txt" GIT_COMMIT)

Затем сгенерируйте version.h (этот шаблон использует переменную ${GIT_COMMIT}):

configure_file(version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" @ONLY)

Вопрос: как сделать так, чтобы этот файл читался, и команды configure_file() выполняются только после создания git-commit.txt? Есть ли способ создать собственную команду / цель, которая просто запускает код сценария CMake?

Также есть execute_process(), который может считывать переменные напрямую, но у него нет DEPENDS.

1 Ответ

0 голосов
/ 21 января 2019

Решением было просто использовать execute_process следующим образом:

# Get the current commit
execute_process(
  COMMAND git rev-parse HEAD
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
  OUTPUT_VARIABLE GIT_COMMIT
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

.. и затем использовать эту выходную переменную в шаблоне version.h.in.

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