myx/lib/generators/GitInfoHeader.cmake

53 lines
2.1 KiB
CMake
Raw Normal View History

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