#[=======================================================================[.rst: myx_generate_git_info_header ---------------------------------- Вспомогательная функция для автоматической генерации заголовочного файла, содержащего информацию о текущем состоянии репозитория git:: myx_generate_git_info_header(TARGET_NAME BASE_FILENAME [ PREFIX prefix ] ) Обязательные параметры: `TARGET_NAME` - имя цели, с которой связан заголовочный файл, и `BASE_FILENAME` - имя генерируемого заголовочного файла. Дополнительный аргумент `PREFIX` добавляет префикс к генерируемым именам переменных. #]=======================================================================] include_guard(GLOBAL) if(${CMAKE_VERSION} VERSION_LESS "3.17.0") set(MYX_CMAKE_LIB_GENERATORS_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}") endif() function(myx_generate_git_info_header TARGET_NAME BASE_FILENAME) if(${CMAKE_VERSION} VERSION_LESS "3.17.0") set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_GENERATORS_DIR_BACKPORT}) endif() set(options) set(oneValueArgs PREFIX) set(multiValueArgs) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) set(__filename "${PROJECT_BINARY_DIR}/include/${BASE_FILENAME}") file(APPEND ${__filename} "") set(__prefix "") if(ARG_PREFIX) string(APPEND ARG_PREFIX "_") string(REPLACE "-" "_" __prefix ${ARG_PREFIX}) endif() # cmake-format: off if(NOT TARGET ${TARGET_NAME}-git-info-header) add_custom_target(${TARGET_NAME}-git-info-header ALL ${CMAKE_COMMAND} -DGIT_INFO_FILE=${__filename} -DPREFIX=${__prefix} -P ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/GitInfo.cmake BYPRODUCTS ${__filename} WORKING_DIRECTORY ${CMAKE_CURRENT_FUNCTION_LIST_DIR}) endif() # cmake-format: on set_property(TARGET ${TARGET_NAME} APPEND PROPERTY PRIVATE_HEADER_FILES ${__filename}) target_sources(${TARGET_NAME} PRIVATE ${__filename}) add_dependencies(${TARGET_NAME} ${TARGET_NAME}-git-info-header) endfunction()