From edabf194611dffcf59738b613b715e0ec027c940 Mon Sep 17 00:00:00 2001 From: Jamie Snape Date: Mon, 19 Dec 2016 11:44:39 -0500 Subject: [PATCH] Write and install CMake package config files This allows find_package(tinyobjloader) to be called. --- CMakeLists.txt | 60 +++++++++++++++++++++++++++++++++-- tinyobjloader-config.cmake.in | 9 ++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 tinyobjloader-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index e43ea57..956c0c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,8 @@ #on the platform and configuration it is set to build in. project(tinyobjloader) cmake_minimum_required(VERSION 2.8.6) +set(TINYOBJLOADER_SOVERSION 1) +set(TINYOBJLOADER_VERSION 1.0.4) #Folder Shortcuts set(TINYOBJLOADEREXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) @@ -22,15 +24,32 @@ set(tinyobjloader-examples-objsticher ${TINYOBJLOADEREXAMPLES_DIR}/obj_sticher/obj_sticher.cc ) +#Install destinations +set(TINYOBJLOADER_CMAKE_DIR lib/cmake) +set(TINYOBJLOADER_INCLUDE_DIR include) +set(TINYOBJLOADER_LIBRARY_DIR lib) + option(TINYOBJLOADER_BUILD_TEST_LOADER "Build Example Loader Application" OFF) option(TINYOBJLOADER_COMPILATION_SHARED "Build as shared library" OFF) if (TINYOBJLOADER_COMPILATION_SHARED) add_library(tinyobjloader SHARED ${tinyobjloader-Source}) + set_target_properties(tinyobjloader PROPERTIES + SOVERSION ${TINYOBJLOADER_SOVERSION} + ) else() add_library(tinyobjloader STATIC ${tinyobjloader-Source}) endif() +set_target_properties(tinyobjloader PROPERTIES VERSION ${TINYOBJLOADER_VERSION}) + +target_include_directories(tinyobjloader INTERFACE + $ + $ + ) + +export(TARGETS tinyobjloader FILE ${PROJECT_NAME}-targets.cmake) + if(TINYOBJLOADER_BUILD_TEST_LOADER) add_executable(test_loader ${tinyobjloader-Example-Source}) target_link_libraries(test_loader tinyobjloader) @@ -48,14 +67,51 @@ if (TINYOBJLOADER_BUILD_OBJ_STICHER) ) endif() +#Write CMake package config files +include(CMakePackageConfigHelpers) + +configure_package_config_file( + tinyobjloader-config.cmake.in + tinyobjloader-config.cmake + INSTALL_DESTINATION + ${TINYOBJLOADER_CMAKE_DIR} + PATH_VARS + TINYOBJLOADER_INCLUDE_DIR + TINYOBJLOADER_LIBRARY_DIR + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + +write_basic_package_version_file(tinyobjloader-config-version.cmake + VERSION + ${TINYOBJLOADER_VERSION} + COMPATIBILITY + SameMajorVersion + ) + #Installation install ( TARGETS tinyobjloader + EXPORT ${PROJECT_NAME}-targets DESTINATION - lib + ${TINYOBJLOADER_LIBRARY_DIR} + PUBLIC_HEADER DESTINATION + ${TINYOBJLOADER_INCLUDE_DIR} + RUNTIME DESTINATION + bin + ) +install ( EXPORT + ${PROJECT_NAME}-targets + DESTINATION + ${TINYOBJLOADER_LIBRARY_DIR} ) install ( FILES tiny_obj_loader.h DESTINATION - include + ${TINYOBJLOADER_INCLUDE_DIR} + ) +install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/tinyobjloader-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/tinyobjloader-config-version.cmake" + DESTINATION + ${TINYOBJLOADER_CMAKE_DIR} ) diff --git a/tinyobjloader-config.cmake.in b/tinyobjloader-config.cmake.in new file mode 100644 index 0000000..2d6b3e3 --- /dev/null +++ b/tinyobjloader-config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +set(TINYOBJLOADER_VERSION "@TINYOBJLOADER_VERSION@") + +set_and_check(TINYOBJLOADER_INCLUDE_DIRS "@PACKAGE_TINYOBJLOADER_INCLUDE_DIR@") +set_and_check(TINYOBJLOADER_LIBRARY_DIRS "@PACKAGE_TINYOBJLOADER_LIBRARY_DIR@") +set(TINYOBJLOADER_LIBRARIES tinyobjloader) + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")