From 47c10bfbaea5d9c78b43bbdc4ae4a7a7fca4003d Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Thu, 29 Sep 2022 14:19:40 +0300 Subject: [PATCH] 1.99.4 --- MyxCMakeConfig.cmake | 1 + MyxCMakeConfigVersion.cmake | 2 +- README.md | 2 +- lib/AddLibrary.cmake | 28 ++++++++++++++++++++- lib/InstallLibrary.cmake | 41 +++++++++++++++++++++++++++++++ lib/InstallLibraryConfig.cmake.in | 5 ++++ 6 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 lib/InstallLibrary.cmake create mode 100644 lib/InstallLibraryConfig.cmake.in diff --git a/MyxCMakeConfig.cmake b/MyxCMakeConfig.cmake index e5aa3ca..72ffde4 100644 --- a/MyxCMakeConfig.cmake +++ b/MyxCMakeConfig.cmake @@ -22,6 +22,7 @@ include(${MYX_CMAKE_LIB_DIR}/SemanticProjectVersion.cmake) include(${MYX_CMAKE_LIB_DIR}/NinjaGeneratorWrapper.cmake) include(${MYX_CMAKE_LIB_DIR}/AddLibrary.cmake) +include(${MYX_CMAKE_LIB_DIR}/InstallLibrary.cmake) include(${MYX_CMAKE_LIB_DIR}/Qt5TargetSetup.cmake) unset(MYX_CMAKE_SOURCE_DIR) diff --git a/MyxCMakeConfigVersion.cmake b/MyxCMakeConfigVersion.cmake index 8d7093f..3e34570 100644 --- a/MyxCMakeConfigVersion.cmake +++ b/MyxCMakeConfigVersion.cmake @@ -1,4 +1,4 @@ -set(MYX_CMAKE_PACKAGE_VERSION "1.99.3") +set(MYX_CMAKE_PACKAGE_VERSION "1.99.4") if(MYX_CMAKE_PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() diff --git a/README.md b/README.md index 7d21286..d2f08cb 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,6 @@ `project` добавить строку: ```cmake -find_package(MyxCMake 1.99.3 PATHS cmake/myx NO_DEFAULT_PATH QUIET REQUIRED) +find_package(MyxCMake 1.99.4 PATHS cmake/myx NO_DEFAULT_PATH QUIET REQUIRED) ``` diff --git a/lib/AddLibrary.cmake b/lib/AddLibrary.cmake index 9fe1e1d..c4b78c5 100644 --- a/lib/AddLibrary.cmake +++ b/lib/AddLibrary.cmake @@ -1,7 +1,6 @@ include_guard(GLOBAL) include(GenerateExportHeader) -include(GNUInstallDirs) function(myx_add_library) set(options) @@ -42,6 +41,32 @@ function(myx_add_library) EXPORT_FILE_NAME "${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/export.hpp" DEFINE_NO_DEPRECATED ) + + # Цель для создания разделяемой библиотеки из объектных файлов + if(${PROJECT_NAME_UPPER}_BUILD_SHARED) + # Для создания разделяемой библиотеки используются объектные файлы цели ${PROJECT_NAME} + add_library(${PROJECT_NAME}_shared SHARED $) + # Установка дополнительных свойств для цели ${PROJECT_NAME}_shared + # OUTPUT_NAME: базовое имя выходного файла (без учёта расширения) + # VERSION: версия библиотеки + # SOVERSION: мажорная версия библиотеки + set_target_properties(${PROJECT_NAME}_shared + PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} + OUTPUT_NAME ${PROJECT_NAME}) + endif() + + # Цель для создания статической библиотеки из объектных файлов + if(${PROJECT_NAME_UPPER}_BUILD_STATIC) + # Для создания статической библиотеки используются объектные файлы цели ${PROJECT_NAME} + add_library(${PROJECT_NAME}_static STATIC $) + # Установка дополнительных свойств для цели ${PROJECT_NAME}_static + # OUTPUT_NAME: базовое имя выходного файла (без учёта расширения) + set_target_properties(${PROJECT_NAME}_static + PROPERTIES + OUTPUT_NAME ${PROJECT_NAME}) + endif() endif() if(arg_PCH) @@ -52,5 +77,6 @@ function(myx_add_library) endif() endif() + target_sources(${PROJECT_NAME} PRIVATE ${arg_SOURCES}) target_compile_definitions(${PROJECT_NAME} PRIVATE ${arg_COMPILE_DEFINITIONS}) endfunction() diff --git a/lib/InstallLibrary.cmake b/lib/InstallLibrary.cmake new file mode 100644 index 0000000..f829908 --- /dev/null +++ b/lib/InstallLibrary.cmake @@ -0,0 +1,41 @@ +include(CMakePackageConfigHelpers) + +function(myx_install_library) + write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ) + + configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/InstallLibraryConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + + install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT dev + ) + + install(TARGETS ${PROJECT_NAME} + EXPORT "${PROJECT_NAME}Targets" + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT dev + ) + + install(EXPORT "${PROJECT_NAME}Targets" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + COMPONENT dev + ) + + install( + FILES + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} + COMPONENT dev + ) +endfunction() diff --git a/lib/InstallLibraryConfig.cmake.in b/lib/InstallLibraryConfig.cmake.in new file mode 100644 index 0000000..5e1d770 --- /dev/null +++ b/lib/InstallLibraryConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") + +check_required_components("@PROJECT_NAME@")