Обновление
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -67,7 +67,7 @@ tags
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
export_autogen.hpp
 | 
			
		||||
*_export.hpp
 | 
			
		||||
 | 
			
		||||
# Prerequisites
 | 
			
		||||
*.d
 | 
			
		||||
 
 | 
			
		||||
@@ -9,19 +9,25 @@ project(pow VERSION 1.1.1 LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
# Подключение дополнительных функций для CMake
 | 
			
		||||
# По умолчанию предполагается использование версии MyxCMake,
 | 
			
		||||
# файлы которой находятся в каталоге `cmake/myx` текущего проекта.
 | 
			
		||||
# Если определена переменная `MYX_CMAKE_USE_SYSTEM`, то выполняется
 | 
			
		||||
# поиск версии в каталогах перечисленных в переменной `CMAKE_MODULES_DIR`.
 | 
			
		||||
###
 | 
			
		||||
find_package(MyxCMake 1.99.9 PATHS ${PROJECT_SOURCE_DIR}/cmake/myx NO_DEFAULT_PATH QUIET REQUIRED)
 | 
			
		||||
if(MYX_CMAKE_USE_SYSTEM)
 | 
			
		||||
  find_package(MyxCMake 1.99.9 NO_DEFAULT_PATH QUIET REQUIRED)
 | 
			
		||||
else()
 | 
			
		||||
  include(${PROJECT_SOURCE_DIR}/cmake/myx/MyxCMakeConfig.cmake)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Цель для создания библиотеки, состоящей из заголовочных файлов
 | 
			
		||||
myx_add_library(${PROJECT_NAME}
 | 
			
		||||
  TYPE INTERFACE
 | 
			
		||||
)
 | 
			
		||||
myx_add_library(${PROJECT_NAME} INTERFACE)
 | 
			
		||||
 | 
			
		||||
# Настройка свойств цели
 | 
			
		||||
myx_target_setup(${PROJECT_NAME}
 | 
			
		||||
  SOURCES
 | 
			
		||||
    ${PROJECT_SOURCE_DIR}/include/pow/pow.hpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
if(PROJECT_IS_TOP_LEVEL)
 | 
			
		||||
  myx_install_library(${PROJECT_NAME})
 | 
			
		||||
endif()
 | 
			
		||||
# Команды для установки библиотеки
 | 
			
		||||
myx_install_library(${PROJECT_NAME})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +1,42 @@
 | 
			
		||||
#[=======================================================================[.rst:
 | 
			
		||||
myx_add_library
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Вспомогательная функция для создания библиотеки::
 | 
			
		||||
 | 
			
		||||
    myx_add_library(NAME TYPE)
 | 
			
		||||
 | 
			
		||||
Обязательные параметры: `NAME` - имя библиотеки и `TYPE` - тип цели.
 | 
			
		||||
Все остальные параметры передаются стандартной функции `add_library()`
 | 
			
		||||
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
 | 
			
		||||
include_guard(GLOBAL)
 | 
			
		||||
 | 
			
		||||
include(GenerateExportHeader)
 | 
			
		||||
 | 
			
		||||
function(myx_add_library NAME)
 | 
			
		||||
function(myx_add_library NAME TYPE)
 | 
			
		||||
  set(options)
 | 
			
		||||
  set(oneValueArgs TYPE)
 | 
			
		||||
  set(multiValueArgs SOURCES)
 | 
			
		||||
  cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | 
			
		||||
  set(oneValueArgs)
 | 
			
		||||
  set(multiValueArgs)
 | 
			
		||||
 | 
			
		||||
  if(NOT arg_TYPE)
 | 
			
		||||
    set(arg_TYPE "OBJECT")
 | 
			
		||||
  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | 
			
		||||
 | 
			
		||||
  # Вызов стандартной функции `add_library()`
 | 
			
		||||
  add_library(${NAME} ${TYPE} ${ARG_UNPARSED_ARGUMENTS})
 | 
			
		||||
 | 
			
		||||
  # Если вызов был выполнен не из проекта верхнего уровня,
 | 
			
		||||
  # то созданная цель исключается из цели `all`.
 | 
			
		||||
  # При этом сама цель `${NAME}` может участвовать в сборке,
 | 
			
		||||
  # если окажется в перечне зависимостей.
 | 
			
		||||
  if(NOT PROJECT_IS_TOP_LEVEL)
 | 
			
		||||
    set_target_properties(${NAME} PROPERTIES
 | 
			
		||||
      EXCLUDE_FROM_ALL True
 | 
			
		||||
    )
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  add_library(${NAME} ${arg_TYPE})
 | 
			
		||||
 | 
			
		||||
  if(arg_TYPE STREQUAL INTERFACE)
 | 
			
		||||
  if(TYPE STREQUAL INTERFACE)
 | 
			
		||||
    # Стандартные пути к заголовочным файлам
 | 
			
		||||
    target_include_directories(${NAME}
 | 
			
		||||
      INTERFACE
 | 
			
		||||
        $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
 | 
			
		||||
@@ -27,10 +49,12 @@ function(myx_add_library NAME)
 | 
			
		||||
    # Опция для разрешения сборки статической библиотеки
 | 
			
		||||
    option(${PROJECT_NAME_UPPER}_BUILD_STATIC "Build static library" ON)
 | 
			
		||||
 | 
			
		||||
    # Стандартные пути к заголовочным файлам
 | 
			
		||||
    target_include_directories(${NAME}
 | 
			
		||||
      PUBLIC
 | 
			
		||||
        $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
 | 
			
		||||
      PRIVATE
 | 
			
		||||
        $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
 | 
			
		||||
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -38,14 +62,14 @@ function(myx_add_library NAME)
 | 
			
		||||
 | 
			
		||||
    string(TOUPPER ${NAME} suffix)
 | 
			
		||||
    generate_export_header(${NAME}
 | 
			
		||||
        BASE_NAME "${suffix}"
 | 
			
		||||
        EXPORT_MACRO_NAME "EXPORT_${suffix}"
 | 
			
		||||
        DEPRECATED_MACRO_NAME "DEPRECATED_${suffix}"
 | 
			
		||||
        NO_DEPRECATED_MACRO_NAME "NO_DEPRECATED_${suffix}"
 | 
			
		||||
        NO_EXPORT_MACRO_NAME "NO_EXPORT_${suffix}"
 | 
			
		||||
        STATIC_DEFINE "STATIC_DEFINE_${suffix}"
 | 
			
		||||
        EXPORT_FILE_NAME "${PROJECT_SOURCE_DIR}/include/${NAME}/export_autogen.hpp"
 | 
			
		||||
        DEFINE_NO_DEPRECATED
 | 
			
		||||
      BASE_NAME ${suffix}
 | 
			
		||||
      EXPORT_MACRO_NAME "EXPORT_${suffix}"
 | 
			
		||||
      DEPRECATED_MACRO_NAME "DEPRECATED_${suffix}"
 | 
			
		||||
      NO_DEPRECATED_MACRO_NAME "NO_DEPRECATED_${suffix}"
 | 
			
		||||
      NO_EXPORT_MACRO_NAME "NO_EXPORT_${suffix}"
 | 
			
		||||
      STATIC_DEFINE "STATIC_DEFINE_${suffix}"
 | 
			
		||||
      EXPORT_FILE_NAME "${PROJECT_SOURCE_DIR}/include/${NAME}/${NAME}_export.hpp"
 | 
			
		||||
      DEFINE_NO_DEPRECATED
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # Цель для создания разделяемой библиотеки из объектных файлов
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,9 @@
 | 
			
		||||
# Обёртки для функций вывода сообщений
 | 
			
		||||
#[=======================================================================[.rst:
 | 
			
		||||
 | 
			
		||||
Обёртки для функции `message()`, которые в терминале UNIX
 | 
			
		||||
подсвечиают сообщения в зависимости от важности.
 | 
			
		||||
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
 | 
			
		||||
include_guard(GLOBAL)
 | 
			
		||||
 | 
			
		||||
@@ -22,14 +27,22 @@ if(DEFINED ENV{TERM} AND UNIX)
 | 
			
		||||
  set(MyxColorBoldWhite   "${Esc}[1;37m")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
function(myx_message_error)
 | 
			
		||||
function(myx_message_fatal_error)
 | 
			
		||||
  message(FATAL_ERROR ${MyxColorBoldRed}${ARGV}${MyxColorReset})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
function(myx_message_send_error)
 | 
			
		||||
  message(SEND_ERROR ${MyxColorBoldRed}${ARGV}${MyxColorReset})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
function(myx_message_warning)
 | 
			
		||||
  message(WARNING ${MyxColorRed}${ARGV}${MyxColorReset})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
function(myx_message_deprecation)
 | 
			
		||||
  message(DEPRECATION ${MyxColorBoldMagenta}${ARGV}${MyxColorReset})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
function(myx_message_status)
 | 
			
		||||
  message(STATUS ${MyxColorMagenta}${ARGV}${MyxColorReset})
 | 
			
		||||
endfunction()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,12 @@
 | 
			
		||||
# Запись результатов сборки проекта внутрь иерархии каталогов с исходными текстами
 | 
			
		||||
# приводит к засорению файлами формируемыми на этапе сборки, которые затрудняют
 | 
			
		||||
# разработку, поиск в оригинальных файлах и мешают ориентироваться в проекте.
 | 
			
		||||
# При работе с несколькими типами сборки, например, отладка и выпуск, появляется
 | 
			
		||||
# необходимость корректного полного удаления результатов предыдущего варианта.
 | 
			
		||||
#[=======================================================================[.rst:
 | 
			
		||||
 | 
			
		||||
Запись результатов сборки проекта внутрь иерархии каталогов с исходными текстами
 | 
			
		||||
приводит к засорению файлами формируемыми на этапе сборки, которые затрудняют
 | 
			
		||||
разработку, поиск в оригинальных файлах и мешают ориентироваться в проекте.
 | 
			
		||||
При работе с несколькими типами сборки, например, отладка и выпуск, появляется
 | 
			
		||||
необходимость корректного полного удаления результатов предыдущего варианта.
 | 
			
		||||
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
 | 
			
		||||
include_guard(GLOBAL)
 | 
			
		||||
 | 
			
		||||
@@ -47,4 +51,3 @@ unset(cmake_binary_dir)
 | 
			
		||||
unset(project_source_dir)
 | 
			
		||||
unset(project_binary_dir)
 | 
			
		||||
unset(cmake_install_prefix)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,12 +25,21 @@ function(myx_install_library NAME)
 | 
			
		||||
    NO_CHECK_REQUIRED_COMPONENTS_MACRO
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/
 | 
			
		||||
  install(
 | 
			
		||||
    DIRECTORY ${PROJECT_SOURCE_DIR}/include/
 | 
			
		||||
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
 | 
			
		||||
    COMPONENT dev
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  install(EXPORT ${NAME}Targets
 | 
			
		||||
  install(
 | 
			
		||||
    TARGETS ${NAME}
 | 
			
		||||
    EXPORT ${NAME}Targets
 | 
			
		||||
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
			
		||||
    COMPONENT lib
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  install(
 | 
			
		||||
    EXPORT ${NAME}Targets
 | 
			
		||||
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${NAME}
 | 
			
		||||
    COMPONENT dev
 | 
			
		||||
  )
 | 
			
		||||
@@ -47,8 +56,7 @@ function(myx_install_library NAME)
 | 
			
		||||
    install(
 | 
			
		||||
      TARGETS ${NAME}_shared
 | 
			
		||||
      EXPORT ${NAME}Targets
 | 
			
		||||
      LIBRARY
 | 
			
		||||
      DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
			
		||||
      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
			
		||||
      COMPONENT lib
 | 
			
		||||
    )
 | 
			
		||||
  endif()
 | 
			
		||||
@@ -57,8 +65,7 @@ function(myx_install_library NAME)
 | 
			
		||||
    install(
 | 
			
		||||
      TARGETS ${NAME}_static
 | 
			
		||||
      EXPORT ${NAME}Targets
 | 
			
		||||
      ARCHIVE
 | 
			
		||||
      DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
			
		||||
      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
 | 
			
		||||
      COMPONENT lib
 | 
			
		||||
    )
 | 
			
		||||
  endif()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user