Обновление MyxCMake
This commit is contained in:
parent
96443f5218
commit
cb54741867
@ -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()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user