Split shared and static configuration
This commit is contained in:
parent
3a768508fd
commit
3fcbaf7fff
|
@ -90,6 +90,8 @@ set(CMAKE_MODULE_FILES
|
|||
set(CMAKE_TEMPLATE_FILES
|
||||
cmake/templates/bash-completion.sh.in
|
||||
cmake/templates/Config.cmake.in
|
||||
cmake/templates/SharedConfig.cmake.in
|
||||
cmake/templates/StaticConfig.cmake.in
|
||||
cmake/templates/config.h.in
|
||||
cmake/templates/desktop.in
|
||||
cmake/templates/doxygen.in
|
||||
|
@ -129,7 +131,7 @@ set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
|
|||
set(META_APP_DESCRIPTION "Useful C++ classes and routines such as argument parser, IO and conversion utilities")
|
||||
set(META_VERSION_MAJOR 4)
|
||||
set(META_VERSION_MINOR 12)
|
||||
set(META_VERSION_PATCH 1)
|
||||
set(META_VERSION_PATCH 2)
|
||||
|
||||
# find required 3rd party libraries
|
||||
include(3rdParty)
|
||||
|
|
|
@ -23,12 +23,9 @@ else()
|
|||
set(META_HEADER_ONLY_LIB YES)
|
||||
endif()
|
||||
|
||||
# include for configure_package_config_file and write_basic_package_version_file
|
||||
# includes for configure_package_config_file, write_basic_package_version_file and find_template_file
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
# find template for CMake config file
|
||||
include(TemplateFinder)
|
||||
find_template_file("Config.cmake" CPP_UTILITIES CONFIG_TEMPLATE_FILE)
|
||||
|
||||
# determine library directory suffix
|
||||
set(LIB_SUFFIX "" CACHE STRING "specifies the general suffix for the library directory")
|
||||
|
@ -74,7 +71,6 @@ if(NOT META_PRIVATE_STATIC_LIB_COMPILE_DEFINITIONS)
|
|||
endif()
|
||||
|
||||
# add global library-specific header
|
||||
include(TemplateFinder)
|
||||
find_template_file("global.h" CPP_UTILITIES GLOBAL_H_TEMPLATE_FILE)
|
||||
if("${META_PROJECT_NAME}" STREQUAL "c++utilities")
|
||||
set(GENERAL_GLOBAL_H_INCLUDE_PATH "\"./application/global.h\"")
|
||||
|
@ -238,6 +234,7 @@ if(META_HEADER_ONLY_LIB)
|
|||
endif()
|
||||
|
||||
# create the CMake package config file from template
|
||||
find_template_file("Config.cmake" CPP_UTILITIES CONFIG_TEMPLATE_FILE)
|
||||
configure_package_config_file(
|
||||
"${CONFIG_TEMPLATE_FILE}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${META_PROJECT_NAME}Config.cmake"
|
||||
|
@ -250,6 +247,24 @@ configure_package_config_file(
|
|||
BIN_INSTALL_DESTINATION
|
||||
LIB_INSTALL_DESTINATION
|
||||
)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
find_template_file("SharedConfig.cmake" CPP_UTILITIES SHARED_CONFIG_TEMPLATE_FILE)
|
||||
configure_package_config_file(
|
||||
"${SHARED_CONFIG_TEMPLATE_FILE}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${META_PROJECT_NAME}SharedConfig.cmake"
|
||||
INSTALL_DESTINATION
|
||||
"${CMAKE_CONFIG_INSTALL_DESTINATION}"
|
||||
)
|
||||
endif()
|
||||
if(BUILD_STATIC_LIBS)
|
||||
find_template_file("StaticConfig.cmake" CPP_UTILITIES STATIC_CONFIG_TEMPLATE_FILE)
|
||||
configure_package_config_file(
|
||||
"${STATIC_CONFIG_TEMPLATE_FILE}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${META_PROJECT_NAME}StaticConfig.cmake"
|
||||
INSTALL_DESTINATION
|
||||
"${CMAKE_CONFIG_INSTALL_DESTINATION}"
|
||||
)
|
||||
endif()
|
||||
|
||||
# write the CMake version config file
|
||||
write_basic_package_version_file(
|
||||
|
|
|
@ -30,27 +30,17 @@ set(@META_PROJECT_VARNAME_UPPER@_PUBLIC_KF_MODULES "@META_PUBLIC_KF_MODULES@")
|
|||
set(@META_PROJECT_VARNAME_UPPER@_HAS_QT_TRANSLATION_FILES @APP_SPECIFIC_QT_TRANSLATIONS_AVAILABLE@)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_QT_RESOURCES @QT_RESOURCES@)
|
||||
|
||||
# define shared library config
|
||||
if(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@")
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_DEPENDS @META_PUBLIC_SHARED_LIB_DEPENDS@)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_COMPILE_DEFINITIONS @META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS@)
|
||||
set(PC_PKG_SHARED_@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@")
|
||||
if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB}")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@META_PROJECT_NAME@SharedTargets.cmake")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# define static library config
|
||||
if(@META_PROJECT_VARNAME_UPPER@_HAS_STATIC_LIB)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static")
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS @META_PUBLIC_STATIC_LIB_DEPENDS@ @META_PRIVATE_STATIC_LIB_DEPENDS@)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_COMPILE_DEFINITIONS @META_PUBLIC_STATIC_LIB_COMPILE_DEFINITIONS@)
|
||||
set(PC_PKG_STATIC_@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static")
|
||||
if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB}")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@META_PROJECT_NAME@StaticTargets.cmake")
|
||||
endif()
|
||||
endif()
|
||||
# include files for shared/static specific configuration
|
||||
set(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB NO)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_HAS_STATIC_LIB NO)
|
||||
file(GLOB @META_PROJECT_VARNAME_UPPER@_SPECIFIC_CONFIG_FILES
|
||||
LIST_DIRECTORIES OFF
|
||||
"${CMAKE_CURRENT_LIST_DIR}/@META_PROJECT_NAME@?*Config.cmake"
|
||||
)
|
||||
foreach(SPECIFIC_CONFIG_FILE IN LISTS @META_PROJECT_VARNAME_UPPER@_SPECIFIC_CONFIG_FILES)
|
||||
include("${SPECIFIC_CONFIG_FILE}")
|
||||
endforeach()
|
||||
unset(SPECIFIC_CONFIG_FILE)
|
||||
|
||||
# set default target: prefer shared lib over static lib
|
||||
if(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB)
|
||||
|
@ -59,7 +49,7 @@ else()
|
|||
set(@META_PROJECT_VARNAME_UPPER@_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static")
|
||||
endif()
|
||||
|
||||
# define macro to ease use of library
|
||||
# define macro to ease use of library in projects following conventions of c++utilities' build script
|
||||
macro(use_@META_PROJECT_VARNAME@)
|
||||
# make CMake modules of the project available
|
||||
list(APPEND CMAKE_MODULE_PATH ${@META_PROJECT_VARNAME_UPPER@_MODULE_DIRS})
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# define shared library config
|
||||
set(@META_PROJECT_VARNAME_UPPER@_HAS_SHARED_LIB YES)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@")
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_DEPENDS @META_PUBLIC_SHARED_LIB_DEPENDS@)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_SHARED_LIB_COMPILE_DEFINITIONS @META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS@)
|
||||
set(PC_PKG_SHARED_@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@ "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@")
|
||||
if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_SHARED_LIB}")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@META_PROJECT_NAME@SharedTargets.cmake")
|
||||
endif()
|
|
@ -0,0 +1,9 @@
|
|||
# define static library config
|
||||
set(@META_PROJECT_VARNAME_UPPER@_HAS_STATIC_LIB YES)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static")
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_DEPENDS @META_PUBLIC_STATIC_LIB_DEPENDS@ @META_PRIVATE_STATIC_LIB_DEPENDS@)
|
||||
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LIB_COMPILE_DEFINITIONS @META_PUBLIC_STATIC_LIB_COMPILE_DEFINITIONS@)
|
||||
set(PC_PKG_STATIC_@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static "@TARGET_PREFIX@@META_PROJECT_NAME@@TARGET_SUFFIX@_static")
|
||||
if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_STATIC_LIB}")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/@META_PROJECT_NAME@StaticTargets.cmake")
|
||||
endif()
|
Loading…
Reference in New Issue