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