Я только что узнал, как я могу использовать
project(ProjectName VERSION 1.0)
и configure_file, чтобы поиграться с версией и встроить ее в бинарный файл.
В проектная документация я вижу, что он также принимает строку описания.
project(ProjectName VERSION 1.0 description_string)
Поэтому я хочу использовать идентификатор фиксации в качестве строки описания. Я могу прочитать идентификатор фиксации из командной строки с помощью git rev-parse HEAD
, но как я могу использовать это для установки описания?
Обратите внимание: если репозиторий, который вы используете, имеет значимые описательные аннотированные теги (как это делают многие общедоступные проекты, и вы можете эмулировать это в частных), вы можете использовать git describe
для получения описательной строки, которая затем может быть чем-то вроде v2.17
для выпуска. .
Вы можете использовать модуль 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 обновил ответ.
Просто запустите
git rev-parse HEAD
через execute_process, сохраните его вывод в переменной через опцию OUTPUT_VARIABLE и используйте эту переменную в вызовеproject()
. Для символа новой строки, завершающего полосу в выводе, используйте опциюOUTPUT_STRIP_TRAILING_WHITESPACE
.