11cmake_minimum_required (VERSION 3.25...3.30)
2- project (mylib
3- VERSION 1.0.0
4- DESCRIPTION "Template for C++ library built with CMake"
5- LANGUAGES CXX)
2+ project (mylib VERSION 1.0.0 DESCRIPTION "Template for C++ library built with CMake" LANGUAGES CXX)
63
74#----------------------------------------------------------------------------------------------------------------------
85# general settings and options
@@ -18,16 +15,28 @@ option(MYLIB_BUILD_TESTS "Build mylib tests" ${is_top_level})
1815option (MYLIB_BUILD_EXAMPLES "Build mylib examples" ${is_top_level} )
1916option (MYLIB_BUILD_DOCS "Build mylib documentation" OFF )
2017option (MYLIB_INSTALL "Generate target for installing mylib" ${is_top_level} )
21- set_if_undefined(MYLIB_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR} /cmake/mylib" CACHE STRING
22- "Install path for mylib package-related CMake files" )
18+ set_if_undefined(
19+ MYLIB_INSTALL_CMAKEDIR
20+ "${CMAKE_INSTALL_LIBDIR} /cmake/mylib"
21+ CACHE
22+ STRING
23+ "Install path for mylib package-related CMake files"
24+ )
2325
2426if (DEFINED MYLIB_SHARED_LIBS)
2527 set (BUILD_SHARED_LIBS ${MYLIB_SHARED_LIBS} )
2628endif ()
2729
2830if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES )
2931 set (CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
30- set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" )
32+ set_property (
33+ CACHE CMAKE_BUILD_TYPE
34+ PROPERTY STRINGS
35+ "Debug"
36+ "Release"
37+ "MinSizeRel"
38+ "RelWithDebInfo"
39+ )
3140endif ()
3241
3342# Neither of these two are technically needed, but they make the expectation clear
@@ -59,10 +68,7 @@ endif()
5968
6069generate_export_header(mylib EXPORT_FILE_NAME include /mylib/${export_file_name} )
6170
62- set (sources
63- include /mylib/export.h
64- include /mylib/mylib.h
65- src/mylib.cpp)
71+ set (sources include /mylib/export.h include /mylib/mylib.h src/mylib.cpp)
6672source_group (TREE "${CMAKE_CURRENT_SOURCE_DIR} " FILES ${sources} )
6773
6874#----------------------------------------------------------------------------------------------------------------------
@@ -71,40 +77,44 @@ source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${sources})
7177
7278include (CMakePackageConfigHelpers)
7379
74-
7580target_sources (mylib PRIVATE src/mylib.cpp)
76- target_sources (mylib PUBLIC FILE_SET HEADERS
77- BASE_DIRS
78- ${CMAKE_CURRENT_SOURCE_DIR} /include
79- ${CMAKE_CURRENT_BINARY_DIR} /include
80- FILES
81- ${CMAKE_CURRENT_SOURCE_DIR} /include /mylib/mylib.h
82- ${CMAKE_CURRENT_SOURCE_DIR} /include /mylib/export.h
83- ${CMAKE_CURRENT_BINARY_DIR} /include /mylib/${export_file_name} )
81+ target_sources (
82+ mylib
83+ PUBLIC FILE_SET
84+ HEADERS
85+ BASE_DIRS
86+ ${CMAKE_CURRENT_SOURCE_DIR} /include
87+ ${CMAKE_CURRENT_BINARY_DIR} /include
88+ FILES
89+ ${CMAKE_CURRENT_SOURCE_DIR} /include /mylib/mylib.h
90+ ${CMAKE_CURRENT_SOURCE_DIR} /include /mylib/export.h
91+ ${CMAKE_CURRENT_BINARY_DIR} /include /mylib/${export_file_name}
92+ )
8493target_compile_definitions (mylib PUBLIC "$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS} >>:MYLIB_STATIC_DEFINE>" )
8594
8695# target_include_directories(mylib
8796# PUBLIC
8897# "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
8998# "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>")
9099
91- set_target_properties (mylib PROPERTIES
92- SOVERSION ${PROJECT_VERSION_MAJOR}
93- VERSION ${PROJECT_VERSION} )
100+ set_target_properties (mylib PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION} )
94101
95102if (MYLIB_INSTALL AND NOT CMAKE_SKIP_INSTALL_RULES)
96- configure_package_config_file(cmake/mylib-config.cmake.in mylib-config.cmake
97- INSTALL_DESTINATION "${MYLIB_INSTALL_CMAKEDIR} " )
98-
99- write_basic_package_version_file(mylib-config-version .cmake
100- COMPATIBILITY SameMajorVersion)
101-
102- install (TARGETS mylib EXPORT mylib_export
103- RUNTIME COMPONENT mylib
104- LIBRARY COMPONENT mylib NAMELINK_COMPONENT mylib-dev
105- ARCHIVE COMPONENT mylib-dev
106- FILE_SET HEADERS
107- INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} " )
103+ configure_package_config_file(
104+ cmake/mylib-config.cmake.in mylib-config.cmake INSTALL_DESTINATION "${MYLIB_INSTALL_CMAKEDIR} "
105+ )
106+
107+ write_basic_package_version_file(mylib-config-version .cmake COMPATIBILITY SameMajorVersion)
108+
109+ install (TARGETS mylib
110+ EXPORT mylib_export
111+ RUNTIME COMPONENT mylib
112+ LIBRARY COMPONENT mylib NAMELINK_COMPONENT mylib-dev
113+ ARCHIVE COMPONENT mylib-dev FILE_SET HEADERS COMPONENT mylib-dev
114+ INCLUDES
115+ COMPONENT mylib-dev
116+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR} "
117+ )
108118
109119 # install(DIRECTORY include/
110120 # TYPE INCLUDE
@@ -120,16 +130,15 @@ if(MYLIB_INSTALL AND NOT CMAKE_SKIP_INSTALL_RULES)
120130 endif ()
121131
122132 install (EXPORT mylib_export
123- COMPONENT mylib-dev
124- FILE "${targets_file} "
125- DESTINATION "${MYLIB_INSTALL_CMAKEDIR} "
126- NAMESPACE mylib::)
133+ COMPONENT mylib-dev
134+ FILE "${targets_file} "
135+ DESTINATION "${MYLIB_INSTALL_CMAKEDIR} "
136+ NAMESPACE mylib::
137+ )
127138
128- install (FILES
129- "${CMAKE_CURRENT_BINARY_DIR} /mylib-config.cmake"
130- "${CMAKE_CURRENT_BINARY_DIR} /mylib-config-version.cmake"
131- COMPONENT mylib-dev
132- DESTINATION "${MYLIB_INSTALL_CMAKEDIR} " )
139+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /mylib-config.cmake" "${CMAKE_CURRENT_BINARY_DIR} /mylib-config-version.cmake"
140+ COMPONENT mylib-dev DESTINATION "${MYLIB_INSTALL_CMAKEDIR} "
141+ )
133142
134143 if (MSVC )
135144 set (pdb_file "" )
@@ -145,10 +154,11 @@ if(MYLIB_INSTALL AND NOT CMAKE_SKIP_INSTALL_RULES)
145154 endif ()
146155
147156 install (FILES "${pdb_file} "
148- COMPONENT mylib-dev
149- CONFIGURATIONS Debug RelWithDebInfo
150- DESTINATION "${pdb_file_destination} "
151- OPTIONAL )
157+ COMPONENT mylib-dev
158+ CONFIGURATIONS Debug RelWithDebInfo
159+ DESTINATION "${pdb_file_destination} "
160+ OPTIONAL
161+ )
152162 endif ()
153163endif ()
154164
0 commit comments