@@ -4,42 +4,38 @@ project(mylib
44 DESCRIPTION "Template for C++ library built with CMake"
55 LANGUAGES CXX)
66
7+ include (cmake/utils.cmake)
8+ set_project_is_top_level()
9+
10+ add_library (mylib) # initialized below
11+ add_library (mylib::mylib ALIAS mylib)
12+
713#----------------------------------------------------------------------------------------------------------------------
814# general settings and options
915#----------------------------------------------------------------------------------------------------------------------
1016
11- include (cmake/utils.cmake)
1217include (GNUInstallDirs)
1318
14- string (COMPARE EQUAL "${CMAKE_SOURCE_DIR} " "${CMAKE_CURRENT_SOURCE_DIR} " is_top_level)
15-
1619# MYLIB_SHARED_LIBS option (undefined by default) can be used to force shared/static build
1720option (MYLIB_BUILD_TESTS "Build mylib tests" OFF )
1821option (MYLIB_BUILD_EXAMPLES "Build mylib examples" OFF )
1922option (MYLIB_BUILD_DOCS "Build mylib documentation" OFF )
20- option (MYLIB_INSTALL "Generate target for installing mylib" ${is_top_level} )
23+ option (MYLIB_INSTALL "Generate target for installing mylib" ${PROJECT_IS_TOP_LEVEL} )
24+ set_if_undefined(MYLIB_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR} /cmake/mylib-${PROJECT_VERSION} " CACHE
25+ STRING "Install path for mylib package-related CMake files" )
26+
27+ if (DEFINED MYLIB_SHARED_LIBS)
28+ set (BUILD_SHARED_LIBS ${MYLIB_SHARED_LIBS} )
29+ endif ()
2130
2231if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES )
2332 set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
2433 set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" )
2534endif ()
2635
27- if (DEFINED MYLIB_SHARED_LIBS)
28- set (BUILD_SHARED_LIBS ${MYLIB_SHARED_LIBS} )
29- endif ()
30-
3136set_if_undefined(CMAKE_CXX_VISIBILITY_PRESET hidden)
3237set_if_undefined(CMAKE_VISIBILITY_INLINES_HIDDEN ON )
3338
34- set_if_undefined(MYLIB_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR} /cmake/mylib-${PROJECT_VERSION} " CACHE
35- STRING "Install path for mylib package-related CMake files" )
36-
37- add_library (mylib) # initialized below
38- add_library (mylib::mylib ALIAS mylib)
39-
40- # make 'find_package(mylib)' do nothing in subprojects because target is already defined
41- list (APPEND defined_targets mylib)
42-
4339#----------------------------------------------------------------------------------------------------------------------
4440# mylib dependencies
4541#----------------------------------------------------------------------------------------------------------------------
@@ -105,15 +101,15 @@ if(MYLIB_INSTALL AND NOT CMAKE_SKIP_INSTALL_RULES)
105101 ARCHIVE COMPONENT mylib-dev
106102 PUBLIC_HEADER COMPONENT mylib-dev DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} /mylib" )
107103
108- set (export_file "mylib-shared-export .cmake" )
104+ set (targets_file "mylib-shared-targets .cmake" )
109105
110106 if (NOT BUILD_SHARED_LIBS )
111- set (export_file "mylib-static-export .cmake" )
107+ set (targets_file "mylib-static-targets .cmake" )
112108 endif ()
113109
114110 install (EXPORT mylib_export
115111 COMPONENT mylib-dev
116- FILE "${export_file } "
112+ FILE "${targets_file } "
117113 DESTINATION "${MYLIB_INSTALL_CMAKEDIR} "
118114 NAMESPACE mylib::)
119115
@@ -148,17 +144,8 @@ endif()
148144# other targets
149145#----------------------------------------------------------------------------------------------------------------------
150146
151- # makes 'find_package' skip search for already defined targets in subdirectories
152- macro (find_package)
153- string (TOLOWER "${ARG0} " name )
154-
155- if (NOT ${name} IN_LIST ${defined_targets} )
156- _find_package(${ARGV} )
157- endif ()
158- endmacro ()
159-
160147if (MYLIB_BUILD_TESTS)
161- if (${is_top_level} )
148+ if (PROJECT_IS_TOP_LEVEL )
162149 enable_testing ()
163150 endif ()
164151
0 commit comments