Skip to content

Commit bb6a707

Browse files
make it optional to install the package ... (#15)
* make it optional to install the package ... to version less subdirectories with: set(INCLUDE_DESTINATION include/${PROJECT_NAME}) * respect review comments remove diagnostig messages * according review, use NO_VERSION_SUFFIX option if set, the install directories are NOT suffixed with -${PROJECT_VERSION} * Update README.md Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com> * remove comment still no test for NO_VERSION_SUFFIX? * Update CMakeLists.txt Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com> * unset _PROJECT_VERSION_SUFFIX if not needed Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com>
1 parent 036e0cb commit bb6a707

4 files changed

Lines changed: 33 additions & 21 deletions

File tree

CMakeLists.txt

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,41 @@ function(packageProject)
1212

1313
cmake_parse_arguments(
1414
PROJECT
15-
""
15+
"NO_VERSION_SUFFIX"
1616
"NAME;VERSION;INCLUDE_DIR;INCLUDE_DESTINATION;BINARY_DIR;COMPATIBILITY;VERSION_HEADER;NAMESPACE"
1717
"DEPENDENCIES"
1818
${ARGN}
1919
)
2020

21+
if(DEFINED PROJECT_NO_VERSION_SUFFIX)
22+
unset(_PROJECT_VERSION_SUFFIX)
23+
else()
24+
set(_PROJECT_VERSION_SUFFIX -${PROJECT_VERSION})
25+
endif()
26+
2127
# handle default arguments
22-
if (NOT DEFINED PROJECT_COMPATIBILITY)
28+
if(NOT DEFINED PROJECT_COMPATIBILITY)
2329
set(PROJECT_COMPATIBILITY AnyNewerVersion)
2430
endif()
2531

2632
# we wanto to automatically add :: to our namespace, so only append if a namespace was given in the first place
2733
# we also provide an alias to ensure that local and installed versions have the same name
28-
if (DEFINED PROJECT_NAMESPACE)
34+
if(DEFINED PROJECT_NAMESPACE)
2935
set(PROJECT_NAMESPACE ${PROJECT_NAMESPACE}::)
3036
add_library(${PROJECT_NAMESPACE}${PROJECT_NAME} ALIAS ${PROJECT_NAME})
3137
endif()
3238

33-
if (DEFINED PROJECT_VERSION_HEADER)
39+
if(DEFINED PROJECT_VERSION_HEADER)
3440
set(PROJECT_VERSION_INCLUDE_DIR ${PROJECT_BINARY_DIR}/PackageProjectInclude)
3541
string(TOUPPER ${PROJECT_NAME} UPPERCASE_PROJECT_NAME)
3642
configure_file(
3743
${PACKAGE_PROJECT_ROOT_PATH}/version.h.in
3844
${PROJECT_VERSION_INCLUDE_DIR}/${PROJECT_VERSION_HEADER}
3945
@ONLY
4046
)
47+
4148
get_target_property(target_type ${PROJECT_NAME} TYPE)
42-
if (target_type STREQUAL "INTERFACE_LIBRARY")
49+
if(target_type STREQUAL "INTERFACE_LIBRARY")
4350
set(VISIBILITY INTERFACE)
4451
else()
4552
set(VISIBILITY PUBLIC)
@@ -60,31 +67,31 @@ function(packageProject)
6067
install(
6168
TARGETS ${PROJECT_NAME}
6269
EXPORT ${PROJECT_NAME}Targets
63-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}-${PROJECT_VERSION} COMPONENT Runtime
64-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}-${PROJECT_VERSION} COMPONENT Development
65-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}-${PROJECT_VERSION} COMPONENT Runtime
66-
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}-${PROJECT_VERSION} COMPONENT Runtime
67-
PUBLIC_HEADER DESTINATION ${INCLUDE_DESTINATION} COMPONENT Development
70+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX} COMPONENT Runtime
71+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX} COMPONENT Development
72+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX} COMPONENT Runtime
73+
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX} COMPONENT Runtime
74+
PUBLIC_HEADER DESTINATION ${PROJECT_INCLUDE_DESTINATION} COMPONENT Development
6875
)
6976

7077
configure_package_config_file(
7178
${PACKAGE_PROJECT_ROOT_PATH}/Config.cmake.in
7279
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
73-
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
80+
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX}
7481
)
7582

7683
install(
7784
EXPORT ${PROJECT_NAME}Targets
78-
DESTINATION lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
85+
DESTINATION lib/cmake/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX}
7986
NAMESPACE ${PROJECT_NAMESPACE}
8087
)
8188

8289
install(
83-
FILES
90+
FILES
8491
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
8592
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
8693
DESTINATION
87-
lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}
94+
lib/cmake/${PROJECT_NAME}${_PROJECT_VERSION_SUFFIX}
8895
)
8996

9097
install(
@@ -93,4 +100,4 @@ function(packageProject)
93100
)
94101

95102
set(${PROJECT_NAME}_VERSION ${PROJECT_VERSION} CACHE INTERNAL "")
96-
endfunction()
103+
endfunction()

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ packageProject(
3333
# semicolon separated list of the project's dependencies
3434
DEPENDENCIES "fmt 7.1.3;cxxopts 2.2.0"
3535
# (optional) create a header containing the version info
36-
# note that the path should be lowercase
36+
# note that the path should be lowercase
3737
VERSION_HEADER "${PROJECT_NAME}/version.h"
3838
# (optional) install your library with a namespace (do NOT add extra '::')
3939
NAMESPACE ${PROJECT_NAMESPACE}
40+
# (optional) define the project's version compatibility, defaults to `AnyNewerVersion`
41+
# supported values: `AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion`
42+
COMPATIBILITY AnyNewerVersion
43+
# (optional) flag to disable the versioning of install destinations
44+
NO_VERSION_SUFFIX
4045
)
4146
```
4247

test/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
22

33
option(TEST_INSTALLED_VERSION "Test the version found by find_package" OFF)
44

5-
project(PackageProjectTest
5+
project(PackageProjectTest
66
VERSION 1.0
77
LANGUAGES CXX
88
)
@@ -19,9 +19,9 @@ endif()
1919

2020
add_executable(test main.cpp)
2121

22-
target_link_libraries(test
23-
dependency
24-
ns::namespaced_dependency
22+
target_link_libraries(test
23+
dependency
24+
ns::namespaced_dependency
2525
transitive_dependency::transitive_dependency
2626
)
2727

test/dependency/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
22

3-
project(dependency
3+
project(dependency
44
VERSION 1.2.3
55
LANGUAGES CXX
66
)

0 commit comments

Comments
 (0)