Skip to content

Commit daaaf65

Browse files
committed
Modernize cmake project files
1 parent 5115efe commit daaaf65

File tree

7 files changed

+45
-23
lines changed

7 files changed

+45
-23
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
build/
12
/build*
23
/.vscode
34
/cpm_modules
4-
.DS_Store
5+
.DS_Store

CMakeLists.txt

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.14...3.22)
1+
cmake_minimum_required(VERSION 3.24...3.31)
22

33
# ---- Project ----
44

@@ -24,15 +24,18 @@ endif()
2424
include(cmake/CPM.cmake)
2525

2626
# PackageProject.cmake will be used to make our target installable
27-
CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.8.0")
27+
CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.13.0")
2828

2929
CPMAddPackage(
3030
NAME fmt
31-
GIT_TAG 10.2.1
31+
GIT_TAG 11.1.4
3232
GITHUB_REPOSITORY fmtlib/fmt
3333
OPTIONS "FMT_INSTALL YES" # create an installable target
3434
)
3535

36+
set(CMAKE_SKIP_INSTALL_RULES YES)
37+
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL})
38+
3639
# ---- Add source files ----
3740

3841
# Note: globbing sources is considered bad practice as CMake's generators may not detect new files
@@ -42,9 +45,27 @@ file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/
4245

4346
# ---- Create library ----
4447

48+
# the location where the project's version header will be placed should match the project's regular
49+
# header paths
50+
string(TOLOWER ${PROJECT_NAME}/version.h VERSION_HEADER_LOCATION)
51+
4552
# Note: for header-only libraries change all PUBLIC flags to INTERFACE and create an interface
4653
# target: add_library(${PROJECT_NAME} INTERFACE)
47-
add_library(${PROJECT_NAME} ${headers} ${sources})
54+
add_library(${PROJECT_NAME})
55+
target_sources(
56+
${PROJECT_NAME}
57+
PRIVATE ${sources}
58+
PUBLIC FILE_SET
59+
greater_public_headers
60+
TYPE
61+
HEADERS
62+
BASE_DIRS
63+
${CMAKE_CURRENT_SOURCE_DIR}/include
64+
${CMAKE_CURRENT_BINARY_DIR}
65+
FILES
66+
${headers}
67+
${CMAKE_CURRENT_BINARY_DIR}/${VERSION_HEADER_LOCATION}
68+
)
4869
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
4970

5071
# being a cross-platform target, we enforce standards conformance on MSVC
@@ -53,18 +74,18 @@ target_compile_options(${PROJECT_NAME} PUBLIC "$<$<COMPILE_LANG_AND_ID:CXX,MSVC>
5374
# Link dependencies
5475
target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt)
5576

56-
target_include_directories(
57-
${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
58-
$<INSTALL_INTERFACE:include/${PROJECT_NAME}-${PROJECT_VERSION}>
59-
)
77+
if(CMAKE_SKIP_INSTALL_RULES)
78+
set(GREETER_VERSION \"${PROJECT_VERSION}\")
79+
string(TOUPPER ${PROJECT_NAME} UPPERCASE_PROJECT_NAME)
80+
configure_file(${PACKAGE_PROJECT_ROOT_PATH}/version.h.in ${VERSION_HEADER_LOCATION} @ONLY)
81+
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
82+
83+
return()
84+
endif()
6085

6186
# ---- Create an installable target ----
6287
# this allows users to install and find the library via `find_package()`.
6388

64-
# the location where the project's version header will be placed should match the project's regular
65-
# header paths
66-
string(TOLOWER ${PROJECT_NAME}/version.h VERSION_HEADER_LOCATION)
67-
6889
packageProject(
6990
NAME ${PROJECT_NAME}
7091
VERSION ${PROJECT_VERSION}
@@ -74,5 +95,5 @@ packageProject(
7495
INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION}
7596
VERSION_HEADER "${VERSION_HEADER_LOCATION}"
7697
COMPATIBILITY SameMajorVersion
77-
DEPENDENCIES "fmt 10.2.1"
98+
DEPENDENCIES "fmt 11.1.4"
7899
)

all/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# this script adds all subprojects to a single build to allow IDEs understand the full project
22
# structure.
33

4-
cmake_minimum_required(VERSION 3.14...3.22)
4+
cmake_minimum_required(VERSION 3.24...3.31)
55

66
project(BuildAll LANGUAGES CXX)
77

cmake/CPM.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
#
33
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
44

5-
set(CPM_DOWNLOAD_VERSION 0.40.2)
6-
set(CPM_HASH_SUM "c8cdc32c03816538ce22781ed72964dc864b2a34a310d3b7104812a5ca2d835d")
5+
set(CPM_DOWNLOAD_VERSION 0.40.5)
6+
set(CPM_HASH_SUM "c46b876ae3b9f994b4f05a4c15553e0485636862064f1fcc9d8b4f832086bc5d")
77

88
if(CPM_SOURCE_CACHE)
99
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")

documentation/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.14...3.22)
1+
cmake_minimum_required(VERSION 3.24...3.31)
22

33
project(GreeterDocs)
44

standalone/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.14...3.22)
1+
cmake_minimum_required(VERSION 3.24...3.31)
22

33
project(GreeterStandalone LANGUAGES CXX)
44

@@ -12,7 +12,7 @@ include(../cmake/CPM.cmake)
1212

1313
CPMAddPackage(
1414
GITHUB_REPOSITORY jarro2783/cxxopts
15-
VERSION 3.0.0
15+
VERSION 3.2.1
1616
OPTIONS "CXXOPTS_BUILD_EXAMPLES NO" "CXXOPTS_BUILD_TESTS NO" "CXXOPTS_ENABLE_INSTALL YES"
1717
)
1818

test/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.14...3.22)
1+
cmake_minimum_required(VERSION 3.24...3.31)
22

33
project(GreeterTests LANGUAGES CXX)
44

@@ -15,8 +15,8 @@ include(../cmake/tools.cmake)
1515

1616
include(../cmake/CPM.cmake)
1717

18-
CPMAddPackage("gh:doctest/doctest@2.4.9")
19-
CPMAddPackage("gh:TheLartians/Format.cmake@1.7.3")
18+
CPMAddPackage("gh:doctest/doctest@2.4.11")
19+
CPMAddPackage("gh:TheLartians/Format.cmake@1.8.3")
2020

2121
if(TEST_INSTALLED_VERSION)
2222
find_package(Greeter REQUIRED)

0 commit comments

Comments
 (0)