From d2b0626757b44f991f791b4fd2c33d5a6b3bb809 Mon Sep 17 00:00:00 2001 From: Osyotr Date: Tue, 26 Dec 2023 16:19:02 +0300 Subject: [PATCH] [cmake] Export config properly --- CMakeLists.txt | 34 ++-------------------- IfcPlusPlus/CMakeLists.txt | 48 ++++++++++++++++++++------------ IfcPlusPlus/IFCPPConfig.cmake.in | 3 ++ 3 files changed, 35 insertions(+), 50 deletions(-) create mode 100644 IfcPlusPlus/IFCPPConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 436036e07..86465779d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED (VERSION 3.6) -project(IfcPlusPlus) +project(IFCPP LANGUAGES CXX) # Set a default build type if none was specified https://blog.kitware.com/cmake-and-the-default-build-type/ set(default_build_type "Release") @@ -12,9 +12,8 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) # Set the possible values of build type for cmake-gui set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") -project(IFCPP) +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") message(STATUS "------------------------------------------------------------------------") option(BUILD_CONSOLE_APPLICATION "Build an example CLI application" ON) @@ -38,37 +37,8 @@ ELSE(NOT WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") ENDIF(NOT WIN32) -set(IFCPP_CONFIG_DIR "share/IFCPP/cmake") ADD_SUBDIRECTORY (IfcPlusPlus) -# Install configuration file -#INCLUDE(CMakePackageConfigHelpers) -#set(config_file_input "${CMAKE_CURRENT_SOURCE_DIR}/cmake/IFCPPConfig.cmake.in") -#set(config_file_output "${CMAKE_CURRENT_BINARY_DIR}/cmake/IFCPPConfig.cmake") - -#CONFIGURE_PACKAGE_CONFIG_FILE( -# ${config_file_input} -# ${config_file_output} -# INSTALL_DESTINATION ${IFCPP_CONFIG_DIR}) - -#INSTALL( -# FILES ${config_file_output} -# DESTINATION ${IFCPP_CONFIG_DIR}) - -#install( -# DIRECTORY src/ifcpp -# DESTINATION include -# FILES_MATCHING PATTERN "*.h" -#) - -#install( -# TARGETS IfcPlusPlus - #EXPORT IfcPlusPlus -# RUNTIME DESTINATION bin -# LIBRARY DESTINATION bin -# ARCHIVE DESTINATION bin -#) - IF(BUILD_CONSOLE_APPLICATION) ADD_SUBDIRECTORY (examples/CreateIfcWallAndWriteFile) ADD_SUBDIRECTORY (examples/LoadFileExample) diff --git a/IfcPlusPlus/CMakeLists.txt b/IfcPlusPlus/CMakeLists.txt index f4b1e054f..1865dd3dc 100644 --- a/IfcPlusPlus/CMakeLists.txt +++ b/IfcPlusPlus/CMakeLists.txt @@ -1,12 +1,11 @@ cmake_minimum_required (VERSION 3.6...3.9) -project(IfcPlusPlus) +project(IfcPlusPlus LANGUAGES CXX) -ADD_DEFINITIONS(-DIFCQUERY_STATIC_LIB) +ADD_DEFINITIONS(-DIFCQUERY_LIB) ADD_DEFINITIONS(-D_HAS_AUTO_PTR_ETC=1) ADD_DEFINITIONS(-DUNICODE) ADD_DEFINITIONS(-D_UNICODE) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD C++17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(WIN32) @@ -75,9 +74,14 @@ if (MSVC) set_source_files_properties(src/ifcpp/IFC4X3/TypeFactory.cpp PROPERTIES COMPILE_FLAGS /bigobj) endif() -add_library(IfcPlusPlus STATIC ${IFCPP_SOURCE_FILES}) +add_library(IfcPlusPlus ${IFCPP_SOURCE_FILES}) + +if(NOT BUILD_SHARED_LIBS) + target_compile_definitions(IfcPlusPlus PUBLIC IFCQUERY_STATIC_LIB) +endif() TARGET_INCLUDE_DIRECTORIES(IfcPlusPlus + PUBLIC "$" PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${IFCPP_SOURCE_DIR}/IfcPlusPlus/src @@ -107,24 +111,32 @@ install( DESTINATION include FILES_MATCHING PATTERN "*.h" ) + +# Install cmake config + +set(IFCPP_CONFIG_DIR "share/IFCPP") + install( TARGETS IfcPlusPlus - EXPORT IfcPlusPlus + EXPORT IFCPPTargets RUNTIME DESTINATION bin - LIBRARY DESTINATION bin - ARCHIVE DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) -set(target_output_filename IfcPlusPlus-targets.cmake) -set(target_output "${CMAKE_BINARY_DIR}/cmake/${target_output_filename}") - -export( - EXPORT IfcPlusPlus - FILE ${target_output} - NAMESPACE IFCPP::) +install( + EXPORT IFCPPTargets + DESTINATION "${IFCPP_CONFIG_DIR}" + NAMESPACE IFCPP:: +) +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/IFCPPConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/IFCPPConfig.cmake" + INSTALL_DESTINATION "${IFCPP_CONFIG_DIR}" +) install( - EXPORT IfcPlusPlus - DESTINATION ${IFCPP_CONFIG_DIR} - FILE ${target_output_filename} - NAMESPACE IFCPP::) + FILES "${CMAKE_CURRENT_BINARY_DIR}/IFCPPConfig.cmake" + DESTINATION "${IFCPP_CONFIG_DIR}" +) diff --git a/IfcPlusPlus/IFCPPConfig.cmake.in b/IfcPlusPlus/IFCPPConfig.cmake.in new file mode 100644 index 000000000..0dbba58df --- /dev/null +++ b/IfcPlusPlus/IFCPPConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/IFCPPTargets.cmake")