Пишу консольное приложение на с++ под linux с системой сборки CMake. При запуске приложения оно отображает основную информацию о себе в т.ч. номер версии приложения, который определяется коммитом. Сейчас мне каждый раз приходится изменять эту константу руками (в 90% случаях я просто забываю её менять при очередном коммите). Я хочу что бы при каждой компиляции эта константа определялась автоматически. Самым разумным решением мне кажется заставить Cmake при сборке считывать информацию текущего коммита в которой содержится необходимая строка. Возможно ли как-то сделать это и если возможно то как?
Создайте себе файл с именем version.cmake (или другое, по вкусу) и добавьте туда такое
exec_program(
"git"
${CMAKE_CURRENT_SOURCE_DIR}
ARGS "rev-parse HEAD"
OUTPUT_VARIABLE REL
)
configure_file( "version.h.template" "${CMAKE_CURRENT_BINARY_DIR}/version.h" )
Дальше создайте файл-шаблон version.h.template
#pragma once
#define GIT_REL "${REL}"
В свой основной CMakeLists.txt добавьте где то тако
add_custom_target( git_version ALL
"${CMAKE_COMMAND}" -E chdir "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_COMMAND}" -P "version.cmake"
)
add_dependencies( ${PROJECT_NAME} git_version )
PROJECT_NAME - это имя проекта, скорректируйте по обстоятельствам.
Теперь при запуске этой зависимости, cmake будет бегать к гиту и забирать версию и добавлять ее в хедер version.h
А что с этой версией Вы будете делать - это уже Ваше дело.
Ещё
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо реализовать класс time line, который будет отсчитывать время через заданный ему интервалКак лучше это сделать?
Недавно начал програмировать на с++ и возник вопросНаписал программу которая показывает список учеников и их оценки
Как создать enum который будет доступен везде? Я вот например создал enum и с ним все нормально работает в классах где создаю а вот в класе наследнике...