Установите описание проекта cmake с идентификатором фиксации

Я только что узнал, как я могу использовать

project(ProjectName VERSION 1.0)

и configure_file, чтобы поиграться с версией и встроить ее в бинарный файл.

В проектная документация я вижу, что он также принимает строку описания.

project(ProjectName VERSION 1.0 description_string)

Поэтому я хочу использовать идентификатор фиксации в качестве строки описания. Я могу прочитать идентификатор фиксации из командной строки с помощью git rev-parse HEAD, но как я могу использовать это для установки описания?

Просто запустите git rev-parse HEAD через execute_process, сохраните его вывод в переменной через опцию OUTPUT_VARIABLE и используйте эту переменную в вызове project(). Для символа новой строки, завершающего полосу в выводе, используйте опцию OUTPUT_STRIP_TRAILING_WHITESPACE.

Tsyvarev 06.04.2022 09:52

Обратите внимание: если репозиторий, который вы используете, имеет значимые описательные аннотированные теги (как это делают многие общедоступные проекты, и вы можете эмулировать это в частных), вы можете использовать git describe для получения описательной строки, которая затем может быть чем-то вроде v2.17 для выпуска. .

torek 06.04.2022 21:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать модуль FindGit, чтобы найти исполняемый файл git, а затем запустить его с помощью execute_process, чтобы получить результат, примерно так:

find_package(Git REQUIRED)
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse HEAD OUTPUT_VARIABLE COMMIT_ID OUTPUT_STRIP_TRAILING_WHITESPACE)
project(ProjectName VERSION 1.0 DESCRIPTION "${COMMIT_ID}")
CMake Error at CMakeLists.txt:8 (project): project with VERSION, DESCRIPTION or HOMEPAGE_URL must use LANGUAGES before language names.
KcFnMi 06.04.2022 10:01

@KcFnMi обновил ответ.

ixSci 06.04.2022 10:05

@KcFnMi используйте string(TIMESTAMP ...) (и отдельный вопрос в следующий раз)

ixSci 06.04.2022 10:22
stackoverflow.com/questions/71763399/…
KcFnMi 06.04.2022 10:25

Другие вопросы по теме