Обновление MyxCMake
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
set(MYX_CMAKE_PACKAGE_VERSION "2.3.1")
 | 
			
		||||
set(MYX_CMAKE_PACKAGE_VERSION "2.3.8")
 | 
			
		||||
if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
 | 
			
		||||
  set(PACKAGE_VERSION_COMPATIBLE FALSE)
 | 
			
		||||
else()
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,9 @@ include_guard(GLOBAL)
 | 
			
		||||
if(${CMAKE_VERSION} VERSION_LESS 3.21)
 | 
			
		||||
  get_property(__parent_directory DIRECTORY PROPERTY PARENT_DIRECTORY)
 | 
			
		||||
  if(NOT __parent_directory)
 | 
			
		||||
    set(PROJECT_IS_TOP_LEVEL true)
 | 
			
		||||
    set(PROJECT_IS_TOP_LEVEL TRUE)
 | 
			
		||||
  else()
 | 
			
		||||
    set(PROJECT_IS_TOP_LEVEL FALSE)
 | 
			
		||||
  endif()
 | 
			
		||||
  unset(__parent_directory)
 | 
			
		||||
endif()
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ myx_add_external_target
 | 
			
		||||
 | 
			
		||||
Обязательный параметр: `TARGET_NAME` - имя цели, содержащейся во внешнем проекте.
 | 
			
		||||
Параметр `MODULES_PATH` содержит имя каталога, в который будут загружаться
 | 
			
		||||
внешние проекты (по умлолчанию `modules`). Параметр `GIT_REPOSITORY` содержит
 | 
			
		||||
внешние проекты (по умолчанию `modules`). Параметр `GIT_REPOSITORY` содержит
 | 
			
		||||
адрес внешнего проекта, который нужно загрузить с помощью git. Параметр `GIT_TAG`
 | 
			
		||||
содержит используемые метку, идентификатор коммита или ветку в репозитории.
 | 
			
		||||
Параметр `LOCAL_PATH` используется для указания пути к подкаталогу, находящемуся
 | 
			
		||||
 
 | 
			
		||||
@@ -8,14 +8,10 @@ myx_add_interface_library
 | 
			
		||||
      [ PACKAGES packages ] |
 | 
			
		||||
      [ LINK_LIBRARIES link_libraries ] |
 | 
			
		||||
      [ OUTPUT_NAME output_name ] |
 | 
			
		||||
      [ EXPORT_FILE_NAME file_name ] |
 | 
			
		||||
      [ EXPORT_BASE_NAME base_name ] |
 | 
			
		||||
      [ HEADERS headers ])
 | 
			
		||||
 | 
			
		||||
Обязательные параметры: `TARGET_NAME` - имя библиотеки.
 | 
			
		||||
Параметр `OUTPUT_NAME` определяет базовое имя выходных файлов.
 | 
			
		||||
Параметр `EXPORT_FILE_NAME` задаёт имя заголовочного файла экспортируемых
 | 
			
		||||
переменных, а `EXPORT_BASE_NAME` - базовый суффикс для формирования имён переменных.
 | 
			
		||||
Все остальные параметры передаются в стандартную функцию `add_library()`
 | 
			
		||||
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
@@ -23,7 +19,6 @@ myx_add_interface_library
 | 
			
		||||
include_guard(GLOBAL)
 | 
			
		||||
 | 
			
		||||
include(CMakePackageConfigHelpers)
 | 
			
		||||
include(GenerateExportHeader)
 | 
			
		||||
 | 
			
		||||
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
 | 
			
		||||
  set(MYX_CMAKE_LIB_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
 | 
			
		||||
@@ -83,7 +78,11 @@ function(myx_add_interface_library TARGET_NAME)
 | 
			
		||||
  # При этом сама цель `${TARGET_NAME}` может участвовать в сборке,
 | 
			
		||||
  # если окажется в перечне зависимостей.
 | 
			
		||||
  if(NOT PROJECT_IS_TOP_LEVEL)
 | 
			
		||||
    if(${CMAKE_VERSION} VERSION_GREATER "3.17.0")
 | 
			
		||||
      set_target_properties(${TARGET_NAME} PROPERTIES EXCLUDE_FROM_ALL True)
 | 
			
		||||
    else()
 | 
			
		||||
      set_target_properties(${TARGET_NAME} PROPERTIES INTERFACE_EXCLUDE_FROM_ALL True)
 | 
			
		||||
    endif()
 | 
			
		||||
    return()
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,13 @@ myx_add_object_library
 | 
			
		||||
 | 
			
		||||
    myx_add_object_library(TARGET_NAME
 | 
			
		||||
      [ OUTPUT_NAME output_name ] |
 | 
			
		||||
      [ NO_EXPORT ] |
 | 
			
		||||
      [ EXPORT_FILE_NAME file_name ] |
 | 
			
		||||
      [ EXPORT_BASE_NAME base_name ])
 | 
			
		||||
 | 
			
		||||
Обязательные параметры: `TARGET_NAME` - имя библиотеки.
 | 
			
		||||
Параметр `OUTPUT_NAME` определяет базовое имя выходных файлов.
 | 
			
		||||
Если указана опция `NO_EXPORT`, то файл экспорта не генерируется.
 | 
			
		||||
Параметр `EXPORT_FILE_NAME` задаёт имя заголовочного файла экспортируемых
 | 
			
		||||
переменных, а `EXPORT_BASE_NAME` - базовый суффикс для формирования имён переменных.
 | 
			
		||||
Все остальные параметры передаются в стандартную функцию `add_library()`
 | 
			
		||||
@@ -29,9 +31,8 @@ function(myx_add_object_library TARGET_NAME)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  include(CMakePackageConfigHelpers)
 | 
			
		||||
  include(GenerateExportHeader)
 | 
			
		||||
 | 
			
		||||
  set(options)
 | 
			
		||||
  set(options NO_EXPORT)
 | 
			
		||||
  set(oneValueArgs OUTPUT_NAME EXPORT_FILE_NAME EXPORT_BASE_NAME)
 | 
			
		||||
  set(multiValueArgs)
 | 
			
		||||
  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | 
			
		||||
@@ -64,6 +65,8 @@ function(myx_add_object_library TARGET_NAME)
 | 
			
		||||
  # для создания динамической библиотеки
 | 
			
		||||
  set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
 | 
			
		||||
 | 
			
		||||
  if(NOT ARG_NO_EXPORT)
 | 
			
		||||
    include(GenerateExportHeader)
 | 
			
		||||
    if(NOT EXPORT_BASE_NAME)
 | 
			
		||||
      set(ARG_EXPORT_BASE_NAME ${__project_name_upper})
 | 
			
		||||
    endif()
 | 
			
		||||
@@ -83,6 +86,7 @@ function(myx_add_object_library TARGET_NAME)
 | 
			
		||||
      DEFINE_NO_DEPRECATED
 | 
			
		||||
    )
 | 
			
		||||
    set_property(TARGET ${TARGET_NAME} APPEND PROPERTY INTERFACE_HEADER_FILES "${ARG_EXPORT_FILE_NAME}")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  # Цель для создания динамической библиотеки из объектных файлов
 | 
			
		||||
  if(${__project_name_upper}_BUILD_SHARED)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
#[=======================================================================[.rst:
 | 
			
		||||
 | 
			
		||||
Обёртки для функции `message()`, которые в терминале UNIX
 | 
			
		||||
подсвечиают сообщения в зависимости от важности.
 | 
			
		||||
подсвечивают сообщения в зависимости от важности.
 | 
			
		||||
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
 | 
			
		||||
include_guard(GLOBAL)
 | 
			
		||||
 | 
			
		||||
if(DEFINED ENV{TERM} AND UNIX)
 | 
			
		||||
if(DEFINED ENV{COLORTERM} AND UNIX)
 | 
			
		||||
  string(ASCII 27 Esc)
 | 
			
		||||
  set(MyxColorReset       "${Esc}[m")
 | 
			
		||||
  set(MyxColorBold        "${Esc}[1m")
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,10 @@ function(myx_qt5_target_setup TARGET_NAME)
 | 
			
		||||
      if(__target_type STREQUAL "EXECUTABLE")
 | 
			
		||||
        target_link_libraries(${TARGET_NAME} PRIVATE "Qt5::${iter}")
 | 
			
		||||
      endif()
 | 
			
		||||
      if((__target_type STREQUAL "SHARED_LIBRARY") OR (__target_type STREQUAL "OBJECT_LIBRARY"))
 | 
			
		||||
      if(__target_type STREQUAL "SHARED_LIBRARY")
 | 
			
		||||
        target_link_libraries(${TARGET_NAME} PUBLIC "Qt5::${iter}")
 | 
			
		||||
      endif()
 | 
			
		||||
      if((${CMAKE_VERSION} VERSION_GREATER "3.8.0") AND (__target_type STREQUAL "OBJECT_LIBRARY"))
 | 
			
		||||
        target_link_libraries(${TARGET_NAME} PUBLIC "Qt5::${iter}")
 | 
			
		||||
      endif()
 | 
			
		||||
    endif()
 | 
			
		||||
@@ -85,9 +88,9 @@ function(myx_qt5_target_setup TARGET_NAME)
 | 
			
		||||
      # Добавление скомпилированного файла переводов к списку зависимостей для цели
 | 
			
		||||
      target_sources(${TARGET_NAME} PRIVATE ${qm})
 | 
			
		||||
    endforeach()
 | 
			
		||||
    # Окончение файла ресурсов
 | 
			
		||||
    # Окончание файла ресурсов
 | 
			
		||||
    file(APPEND ${PROJECT_BINARY_DIR}/${TARGET_NAME}_l10n.qrc "</qresource></RCC>\n")
 | 
			
		||||
    # Комплияция файла ресурсов с переводами
 | 
			
		||||
    # Компиляция файла ресурсов с переводами
 | 
			
		||||
    qt5_add_resources(qrc_l10n ${PROJECT_BINARY_DIR}/${TARGET_NAME}_l10n.qrc)
 | 
			
		||||
    target_sources(${TARGET_NAME} PRIVATE ${qrc_l10n})
 | 
			
		||||
  endif()
 | 
			
		||||
 
 | 
			
		||||
@@ -108,6 +108,8 @@ function(myx_target_setup TARGET_NAME)
 | 
			
		||||
              endif()
 | 
			
		||||
            endif()
 | 
			
		||||
          endif()
 | 
			
		||||
        else()
 | 
			
		||||
          target_link_libraries(${TARGET_NAME} PRIVATE ${__link_library})
 | 
			
		||||
        endif()
 | 
			
		||||
      endforeach()
 | 
			
		||||
    endif()
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ include_guard(GLOBAL)
 | 
			
		||||
macro(myx_find_required_packages)
 | 
			
		||||
  set(options)
 | 
			
		||||
  set(oneValueArgs)
 | 
			
		||||
  set(multiValueArgs PACKAGES Boost Qt5 Qt5Private)
 | 
			
		||||
  set(multiValueArgs PACKAGES Boost Qt5 Qt5Private Qt6 Qt6Private)
 | 
			
		||||
  cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 | 
			
		||||
 | 
			
		||||
  foreach(iter ${ARG_PACKAGES})
 | 
			
		||||
@@ -24,6 +24,16 @@ macro(myx_find_required_packages)
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if(ARG_Qt6)
 | 
			
		||||
    find_package(Qt6 COMPONENTS ${ARG_Qt6} REQUIRED)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if(ARG_Qt6Private)
 | 
			
		||||
    foreach(iter ${ARG_Qt6Private})
 | 
			
		||||
      find_package("Qt6${iter}" COMPONENTS Private REQUIRED)
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  foreach(__iter IN LISTS oneValueArgs multiValueArgs)
 | 
			
		||||
    unset(ARG_${__iter})
 | 
			
		||||
  endforeach()
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
По умолчанию предполагается использование версии MyxCMake,
 | 
			
		||||
файлы которой находятся в каталоге `cmake/myx` текущего проекта.
 | 
			
		||||
 | 
			
		||||
Для удобства разботки библиотеки MyxCMake можно указать путь
 | 
			
		||||
Для удобства разработки библиотеки MyxCMake можно указать путь
 | 
			
		||||
к её репозиторию с помощью переменной проекта CMake `MYX_CMAKE_DIR`
 | 
			
		||||
или переменной окружения `MYX_CMAKE_DIR`.
 | 
			
		||||
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
поиск версии в каталогах перечисленных в переменной `CMAKE_MODULES_DIR`.
 | 
			
		||||
 | 
			
		||||
Кроме того выполняется попытка поиска (MyxxCMake)[../../../../myxx] --
 | 
			
		||||
расширения для библиотеки, позволяющиего в режиме разработки программного
 | 
			
		||||
расширения для библиотеки, позволяющего в режиме разработки программного
 | 
			
		||||
проекта использовать дополнительные инструменты для его сопровождения.
 | 
			
		||||
#]=======================================================================]
 | 
			
		||||
 | 
			
		||||
@@ -20,15 +20,15 @@ if(ENV{MYX_CMAKE_DIR})
 | 
			
		||||
  set(MYX_CMAKE_DIR $ENV{MYX_CMAKE_DIR})
 | 
			
		||||
endif()
 | 
			
		||||
if(MYX_CMAKE_DIR)
 | 
			
		||||
  find_package(MyxCMake 2.3.1 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH)
 | 
			
		||||
  myx_message_notice("=== MyxCMake directory: ${MyxCMake_CONFIG} ===")
 | 
			
		||||
  find_package(MyxCMake 2.3.8 REQUIRED CONFIG PATHS ${MYX_CMAKE_DIR} NO_DEFAULT_PATH)
 | 
			
		||||
  myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
 | 
			
		||||
else()
 | 
			
		||||
  if(MYX_CMAKE_USE_SYSTEM)
 | 
			
		||||
    find_package(MyxCMake 2.3.1 REQUIRED)
 | 
			
		||||
    myx_message_notice("=== MyxCMake directory: ${MyxCMake_CONFIG} ===")
 | 
			
		||||
    find_package(MyxCMake 2.3.8 REQUIRED)
 | 
			
		||||
    myx_message_notice("== MyxCMake directory: ${MyxCMake_CONFIG} ==")
 | 
			
		||||
  else()
 | 
			
		||||
    include(${PROJECT_SOURCE_DIR}/cmake/myx/MyxCMakeConfig.cmake)
 | 
			
		||||
    myx_message_notice("=== MyxCMake directory: ${PROJECT_SOURCE_DIR}/cmake/myx ===")
 | 
			
		||||
    myx_message_notice("== MyxCMake directory: ${PROJECT_SOURCE_DIR}/cmake/myx ==")
 | 
			
		||||
  endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user