62 lines
2.4 KiB
CMake
62 lines
2.4 KiB
CMake
#[=======================================================================[.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
|
||
|
||
get_target_property(target_type ${TARGET_NAME} TYPE)
|
||
if(${target_type} STREQUAL "INTERFACE_LIBRARY")
|
||
target_sources(${TARGET_NAME} INTERFACE $<BUILD_INTERFACE:${filename}>)
|
||
else()
|
||
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY PRIVATE_HEADER_FILES ${filename})
|
||
target_sources(${TARGET_NAME} PRIVATE ${filename})
|
||
endif()
|
||
add_dependencies(${TARGET_NAME} ${TARGET_NAME}-git-info-header)
|
||
endfunction()
|