В cmake включить произвольную информацию о времени сборки в / с распределенным исполняемым файлом - PullRequest
0 голосов
/ 13 июня 2018

При использовании cmake мы хотим, чтобы наши дистрибутивные файлы содержали некоторую информацию о самой версии (например, тег git или точку фиксации).Это так, что мы в основном можем определить только из установленного пакета, какой он релиз.

Другими словами, мы ищем что-то вроде вывода git show | head -1:

commit 695ec2ceca0854...blahblahblah

Наши cmake файлы довольно просты и состоят из:

add_executable(exename main.cpp functions.cpp functions.h)

Как настроить CMakeLists.txt для генерации этой информации и , чтобы включить ее в пакет для проекта.

Это может быть встроено в исполняемый файл в виде файла с одним строковым объектом, например:

char *x = "XYZZY-commit 695ec2ceca0854...blahblahblah";

, чтобы мы могли запустить strings в исполняемом файле для получения информации.

Это также может быть совершенно отдельный файл, такой как commitpoint.txt, который упакован и поставляется вместе с исполняемым файлом.

Или, если у кого-то есть лучший способ сделать это, я 'Я открыт для предложений.

Что бы я предпочел избегать - это то, что требует ручного вмешательства при сборке, например, поддержки модуля с информацией, жестко запрограммированной в нем и сохраненной в git сама.Я ищу что-то полностью автоматизированное.

1 Ответ

0 голосов
/ 13 июня 2018

Cmake поставляется с модулем поиска для git , который можно использовать следующим образом:

find_package(Git)

if(Git_FOUND)
    execute_process(COMMAND "${GIT_EXECUTABLE}" log --pretty=format:%h -n 1
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
        OUTPUT_VARIABLE commit_sha1
        ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
    set(commit_sha1 "Unknown")
endif()

, где аргументы git и рабочий каталог, очевидно, могут быть настроены в соответствии с вашими потребностями.Переменная, хранящая нужную информацию, теперь может использоваться при настройке файла,

configure_file(version.cpp.in version.cpp)

, где version.cpp.in содержит

const char *gitInfo = "@commit_sha1@";

Сгенерированный version.cpp будет создан в каталоге сборкии входит в исполняемый файл

add_executable(exename ... ${CMAKE_CURRENT_BINARY_DIR}/version.cpp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...