Skip to content

Commit 4231832

Browse files
committed
Update README.md too
1 parent a059986 commit 4231832

File tree

5 files changed

+40
-20
lines changed

5 files changed

+40
-20
lines changed

CMakeLists.txt

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

33
set(PACKAGE_PROJECT_ROOT_PATH
44
"${CMAKE_CURRENT_LIST_DIR}"
55
CACHE INTERNAL "The path to the PackageProject directory"
66
)
77

8+
# if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.31.0")
9+
# cmake_policy(SET CMP0177 NEW)
10+
# endif()
11+
812
function(packageProject)
913
include(CMakePackageConfigHelpers)
1014
include(GNUInstallDirs)
@@ -133,7 +137,7 @@ function(packageProject)
133137
set(PROJECT_RUNTIME_DESTINATION ${PROJECT_NAME}${PROJECT_VERSION_SUFFIX})
134138
endif()
135139

136-
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.23.0" AND PROJECT_HEADER_SETS)
140+
if(PROJECT_HEADER_SETS)
137141
# required to install if use in project target since CMake 3.23
138142
set(FILE_SET_ARGS "FILE_SET" "${PROJECT_HEADER_SETS}")
139143
endif()

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
Creating installable CMake scripts always requires a large amount of boilerplate code to get things working.
66
This small script should simplify the CMake packaging process into a single, easy-to-use command.
77

8-
PackageProject.cmake has been tested with CMake v3.18.4.
8+
PackageProject.cmake has been tested with CMake v3.24.4.
99

1010
## Usage
1111

@@ -15,7 +15,7 @@ Also the [CPM.cmake](https://github.com/TheLartians/CPM.cmake) script should be
1515
See [here](https://github.com/TheLartians/ModernCppStarter/blob/master/CMakeLists.txt) for an example usage.
1616

1717
```cmake
18-
CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.6.0")
18+
CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.14.0")
1919
2020
packageProject(
2121
# the name of the target to export
@@ -53,6 +53,9 @@ packageProject(
5353
# by default libs will be installed to <...>/lib/<packagename-version>/
5454
# / - means relative to <...>/lib, i.e. install libs to <...>/lib/, bins to <...>/bin/, etc
5555
RUNTIME_DESTINATION /
56+
# (optional) FILE_SET "public_headers;..."
57+
# Install the target releated header file sets too
58+
HEADER_SETS HEADERS
5659
)
5760
```
5861

test/header_only/CMakeLists.txt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,47 @@ cmake_minimum_required(VERSION 3.24...3.31)
22

33
project(
44
header_only
5-
VERSION 1.0
5+
VERSION 1.0.0.0
66
LANGUAGES CXX
77
DESCRIPTION "A header only dependency for testing PackageProject.cmake"
88
)
99

10+
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../.. PackageProject)
11+
1012
# supported in CMake 3.23 and newer
1113
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
1214

1315
add_library(header_only INTERFACE)
1416

17+
string(TOLOWER ${PROJECT_NAME}/version.h VERSION_HEADER_LOCATION)
18+
string(TOUPPER ${PROJECT_NAME} UPPERCASE_PROJECT_NAME)
19+
set(${UPPERCASE_PROJECT_NAME}_VERSION \"${PROJECT_VERSION}\")
20+
configure_file(${PACKAGE_PROJECT_ROOT_PATH}/version.h.in ${VERSION_HEADER_LOCATION} @ONLY)
21+
1522
if(CMAKE_VERIFY_INTERFACE_HEADER_SETS)
1623
target_sources(
17-
header_only PUBLIC FILE_SET HEADERS BASE_DIRS include FILES include/header_only/adder.h
24+
header_only
25+
PUBLIC FILE_SET
26+
HEADERS
27+
BASE_DIRS
28+
include
29+
${PROJECT_BINARY_DIR}
30+
FILES
31+
include/header_only/adder.h
32+
${PROJECT_BINARY_DIR}/${VERSION_HEADER_LOCATION}
1833
)
1934
else()
2035
target_include_directories(
2136
header_only INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
22-
$<INSTALL_INTERFACE:include/${PROJECT_NAME}-${PROJECT_VERSION}>
37+
$<INSTALL_INTERFACE:include>
2338
)
2439
endif()
2540

26-
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../.. PackageProject)
27-
2841
packageProject(
2942
NAME ${PROJECT_NAME}
3043
VERSION ${PROJECT_VERSION}
3144
BINARY_DIR ${PROJECT_BINARY_DIR}
32-
# INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include TODO: INCLUDE_DESTINATION
33-
# include/${PROJECT_NAME}-${PROJECT_VERSION}
3445
INCLUDE_DESTINATION include
35-
VERSION_HEADER "${PROJECT_NAME}/version.h"
3646
DEPENDENCIES ""
3747
CPACK "${TEST_CPACK}"
3848
HEADER_SETS HEADERS

test/namespaced_dependency/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ project(
77
DESCRIPTION "A namespaced dependency for testing PackageProject.cmake"
88
)
99

10-
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
10+
# supported in CMake 3.23 and newer
11+
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS OFF)
1112

1213
set(PROJECT_NAMESPACE "ns")
1314
add_library(namespaced_dependency STATIC source/namespaced_dependency.cpp)
@@ -20,7 +21,7 @@ if(CMAKE_VERIFY_INTERFACE_HEADER_SETS)
2021
else()
2122
target_include_directories(
2223
namespaced_dependency PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
23-
$<INSTALL_INTERFACE:include/${PROJECT_NAME}-${PROJECT_VERSION}>
24+
$<INSTALL_INTERFACE:include>
2425
)
2526
endif()
2627

@@ -34,12 +35,13 @@ packageProject(
3435
VERSION ${PROJECT_VERSION}
3536
NAMESPACE ${PROJECT_NAMESPACE}
3637
BINARY_DIR ${PROJECT_BINARY_DIR}
37-
# INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include TODO: INCLUDE_DESTINATION
38-
# include/${PROJECT_NAME}-${PROJECT_VERSION}
38+
INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include
39+
# XXX INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION}
3940
INCLUDE_DESTINATION include
4041
VERSION_HEADER "namespaced_dependency/version.h"
4142
INCLUDE_HEADER_PATTERN "*.h"
4243
DEPENDENCIES ""
4344
CPACK "${TEST_CPACK}"
45+
RUNTIME_DESTINATION /
4446
HEADER_SETS HEADERS
4547
)

test/transitive_dependency/CMakeLists.txt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ CPMAddPackage(
2626
# Set default visibility to hidden for all targets
2727
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
2828
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
29+
2930
# supported in CMake 3.23 and newer
30-
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
31+
set(CMAKE_VERIFY_INTERFACE_HEADER_SETS OFF)
3132

3233
add_library(${PROJECT_NAME} SHARED source/transitive_dependency.cpp)
3334
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
@@ -41,7 +42,7 @@ if(CMAKE_VERIFY_INTERFACE_HEADER_SETS)
4142
else()
4243
target_include_directories(
4344
transitive_dependency PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
44-
$<INSTALL_INTERFACE:include/${PROJECT_NAME}-${PROJECT_VERSION}>
45+
$<INSTALL_INTERFACE:include>
4546
)
4647
endif()
4748

@@ -52,12 +53,12 @@ packageProject(
5253
VERSION ${PROJECT_VERSION}
5354
NAMESPACE ${PROJECT_NAME}
5455
BINARY_DIR ${PROJECT_BINARY_DIR}
55-
# INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include TODO: INCLUDE_DESTINATION
56-
# include/${PROJECT_NAME}-${PROJECT_VERSION}
56+
INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include
5757
INCLUDE_DESTINATION include
5858
VERSION_HEADER "transitive_dependency/version.h"
5959
EXPORT_HEADER "transitive_dependency/export.h"
6060
DEPENDENCIES "fmt 7.1.3;cxxopts 2.2.0"
6161
CPACK "${TEST_CPACK}"
62+
RUNTIME_DESTINATION /
6263
HEADER_SETS HEADERS
6364
)

0 commit comments

Comments
 (0)