mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-26 09:28:21 +00:00
upgrades to cmake 2.8.12 and adds config and export support
This commit upgrades cmake to 2.8.12 to implement proper cmake `find_package` support using config and export file generation. Having this support enables users to use installed cppformat with a simple `find_package` call. Directly using a version from a build directory is also supported. main.cpp: ``` #include <cppformat/format.h> int main(int argc, char** argv) { for(int i = 0; i < argc; ++i) fmt::print("{}: {}\n",i,argv[i]); return 0; } ``` CMakeLists.txt: ``` cmake_minimum_required(VERSION 2.8.12) project(cppformat-test) find_package(cppformat REQUIRED) add_executable(cppformat-test "main.cpp") target_link_libraries(cppformat-test cppformat) ``` Configuring when cppformat is installed under `CMAKE_INSTALL_PREFIX`: `cmake <PATH_TO_TEST_SRC>` Configuring when cppformat is installed `ELSEWHERE`: `cmake -Dcppformat_DIR=<ELSEWHERE>/lib/cmake/cppformat <PATH_TO_TEST_SRC>` Configuring when cppformat is only built: `cmake -Dcppformat_DIR=<cppformat_BUILD_DIR> <PATH_TO_TEST_SRC>`
This commit is contained in:
parent
97e9ed11bc
commit
daf74ae0b1
@ -1,6 +1,6 @@
|
|||||||
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.6)
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
|
||||||
# Set the default CMAKE_BUILD_TYPE to Release.
|
# Set the default CMAKE_BUILD_TYPE to Release.
|
||||||
# This should be done before the project command since the latter can set
|
# This should be done before the project command since the latter can set
|
||||||
@ -163,8 +163,45 @@ endif ()
|
|||||||
|
|
||||||
# Install targets.
|
# Install targets.
|
||||||
if (FMT_INSTALL)
|
if (FMT_INSTALL)
|
||||||
set(FMT_LIB_DIR lib CACHE STRING
|
include(CMakePackageConfigHelpers)
|
||||||
|
set(config_install_dir "lib/cmake/cppformat")
|
||||||
|
set(version_config "${CMAKE_CURRENT_BINARY_DIR}/cppformatConfigVersion.cmake")
|
||||||
|
set(project_config "${CMAKE_CURRENT_BINARY_DIR}/cppformatConfig.cmake")
|
||||||
|
set(targets_export_name "cppformatTargets")
|
||||||
|
|
||||||
|
set(FMT_LIB_DIR "lib" CACHE STRING
|
||||||
"Installation directory for libraries, relative to ${CMAKE_INSTALL_PREFIX}.")
|
"Installation directory for libraries, relative to ${CMAKE_INSTALL_PREFIX}.")
|
||||||
install(TARGETS cppformat DESTINATION ${FMT_LIB_DIR})
|
|
||||||
install(FILES format.h DESTINATION include/cppformat)
|
# copy the header into the build directory to mimic the installed tree
|
||||||
|
configure_file("format.h" "cppformat/format.h" COPYONLY)
|
||||||
|
# add the include directories for both build and install tree
|
||||||
|
target_include_directories(
|
||||||
|
cppformat PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# generate the version, config and target files into the build directory
|
||||||
|
write_basic_package_version_file(
|
||||||
|
"${version_config}"
|
||||||
|
VERSION ${CPPFORMAT_VERSION}
|
||||||
|
COMPATIBILITY AnyNewerVersion
|
||||||
|
)
|
||||||
|
configure_package_config_file(
|
||||||
|
"support/cmake/cppformatConfig.cmake.in"
|
||||||
|
"${project_config}"
|
||||||
|
INSTALL_DESTINATION "${config_install_dir}"
|
||||||
|
)
|
||||||
|
export(TARGETS cppformat FILE "${targets_export_name}.cmake")
|
||||||
|
|
||||||
|
# install version, config and target files
|
||||||
|
install(
|
||||||
|
FILES "${project_config}" "${version_config}"
|
||||||
|
DESTINATION "${config_install_dir}"
|
||||||
|
)
|
||||||
|
install(EXPORT "${targets_export_name}" DESTINATION "${config_install_dir}")
|
||||||
|
|
||||||
|
# install the library and the include file
|
||||||
|
install(TARGETS cppformat EXPORT "${targets_export_name}" DESTINATION "${FMT_LIB_DIR}")
|
||||||
|
install(FILES format.h DESTINATION "include/cppformat")
|
||||||
endif ()
|
endif ()
|
||||||
|
4
support/cmake/cppformatConfig.cmake.in
Normal file
4
support/cmake/cppformatConfig.cmake.in
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
|
||||||
|
check_required_components("cppformat")
|
Loading…
Reference in New Issue
Block a user