1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-20 12:53:55 +08:00

Help/guide: use GNUInstallDirs in importing-exporting example

This allows the example to also show how to work on systems with
different libdir settings (e.g., Debian multiarch or Red Hat multilib)
rather than a regular `lib` directory.
This commit is contained in:
Ben Boeckel
2021-03-18 09:24:52 -04:00
parent 888c1cb276
commit 26cf661b64
5 changed files with 35 additions and 25 deletions

View File

@@ -1,6 +1,9 @@
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
project(MathFunctions) project(MathFunctions)
# make cache variables for install destinations
include(GNUInstallDirs)
# specify the C++ standard # specify the C++ standard
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_STANDARD_REQUIRED True)
@@ -12,26 +15,26 @@ add_library(MathFunctions STATIC MathFunctions.cxx)
target_include_directories(MathFunctions target_include_directories(MathFunctions
PUBLIC PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:include>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
) )
# install the target and create export-set # install the target and create export-set
install(TARGETS MathFunctions install(TARGETS MathFunctions
EXPORT MathFunctionsTargets EXPORT MathFunctionsTargets
LIBRARY DESTINATION lib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION lib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION include INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
) )
# install header file # install header file
install(FILES MathFunctions.h DESTINATION include) install(FILES MathFunctions.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# generate and install export file # generate and install export file
install(EXPORT MathFunctionsTargets install(EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake FILE MathFunctionsTargets.cmake
NAMESPACE MathFunctions:: NAMESPACE MathFunctions::
DESTINATION lib/cmake/MathFunctions DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )
# include CMakePackageConfigHelpers macro # include CMakePackageConfigHelpers macro
@@ -58,14 +61,14 @@ write_basic_package_version_file(
# create config file # create config file
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
INSTALL_DESTINATION lib/cmake/MathFunctions INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )
# install config files # install config files
install(FILES install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake"
DESTINATION lib/cmake/MathFunctions DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )
# generate the export targets for the build tree # generate the export targets for the build tree

View File

@@ -7,24 +7,24 @@ add_library(MathFunctions::Addition ALIAS Addition)
target_include_directories(Addition target_include_directories(Addition
PUBLIC PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
$<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
) )
# install the target and create export-set # install the target and create export-set
install(TARGETS Addition install(TARGETS Addition
EXPORT AdditionTargets EXPORT AdditionTargets
LIBRARY DESTINATION lib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION lib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION include INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
) )
# install header file # install header file
install(FILES Addition.h DESTINATION include) install(FILES Addition.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# generate and install export file # generate and install export file
install(EXPORT AdditionTargets install(EXPORT AdditionTargets
FILE MathFunctionsAdditionTargets.cmake FILE MathFunctionsAdditionTargets.cmake
NAMESPACE MathFunctions:: NAMESPACE MathFunctions::
DESTINATION lib/cmake/MathFunctions DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )

View File

@@ -1,6 +1,9 @@
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
project(MathFunctionsComponents) project(MathFunctionsComponents)
# make cache variables for install destinations
include(GNUInstallDirs)
# specify the C++ standard # specify the C++ standard
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_STANDARD_REQUIRED True)
@@ -24,7 +27,7 @@ write_basic_package_version_file(
# create config file # create config file
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
INSTALL_DESTINATION lib/cmake/MathFunctions INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
NO_CHECK_REQUIRED_COMPONENTS_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO
) )
@@ -32,5 +35,5 @@ configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
install(FILES install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake"
DESTINATION lib/cmake/MathFunctions DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )

View File

@@ -7,24 +7,24 @@ add_library(MathFunctions::SquareRoot ALIAS SquareRoot)
target_include_directories(SquareRoot target_include_directories(SquareRoot
PUBLIC PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:include>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
) )
# install the target and create export-set # install the target and create export-set
install(TARGETS SquareRoot install(TARGETS SquareRoot
EXPORT SquareRootTargets EXPORT SquareRootTargets
LIBRARY DESTINATION lib LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION lib ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION bin RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION include INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
) )
# install header file # install header file
install(FILES SquareRoot.h DESTINATION include) install(FILES SquareRoot.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# generate and install export file # generate and install export file
install(EXPORT SquareRootTargets install(EXPORT SquareRootTargets
FILE MathFunctionsSquareRootTargets.cmake FILE MathFunctionsSquareRootTargets.cmake
NAMESPACE MathFunctions:: NAMESPACE MathFunctions::
DESTINATION lib/cmake/MathFunctions DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MathFunctions
) )

View File

@@ -202,6 +202,10 @@ project. Start by specifying the :command:`cmake_minimum_required` version and
:language: cmake :language: cmake
:end-before: # create library :end-before: # create library
The :module:`GNUInstallDirs` module is included in order to provide the
project with the flexibility to install into different platform layouts by
making the directories available as cache variables.
Create a library called ``MathFunctions`` with the :command:`add_library` Create a library called ``MathFunctions`` with the :command:`add_library`
command: command: