1cmake_minimum_required(VERSION 3.15) 2project(tinyxml2 VERSION 10.0.0) 3 4include(CTest) 5option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") 6 7## 8## Honor tinyxml2_SHARED_LIBS to match install interface 9## 10 11if (DEFINED tinyxml2_SHARED_LIBS) 12 set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}") 13endif () 14 15## 16## Main library build 17## 18 19set(CMAKE_CXX_VISIBILITY_PRESET hidden) 20set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) 21 22add_library(tinyxml2 tinyxml2.cpp tinyxml2.h) 23add_library(tinyxml2::tinyxml2 ALIAS tinyxml2) 24 25# Uncomment the following line to require C++11 (or greater) to use tinyxml2 26# target_compile_features(tinyxml2 PUBLIC cxx_std_11) 27target_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>") 28 29target_compile_definitions( 30 tinyxml2 31 PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG> 32 INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT> 33 PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS> 34 PUBLIC _FILE_OFFSET_BITS=64 35) 36 37set_target_properties( 38 tinyxml2 39 PROPERTIES 40 DEFINE_SYMBOL "TINYXML2_EXPORT" 41 VERSION "${tinyxml2_VERSION}" 42 SOVERSION "${tinyxml2_VERSION_MAJOR}" 43) 44 45if (tinyxml2_BUILD_TESTING) 46 add_executable(xmltest xmltest.cpp) 47 target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) 48 49 add_test( 50 NAME xmltest 51 COMMAND xmltest 52 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 53 ) 54 55 set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0") 56endif () 57 58## 59## Installation 60## 61 62## Standard modules 63include(GNUInstallDirs) 64include(CMakePackageConfigHelpers) 65 66## Custom locations 67set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" 68 CACHE PATH "Directory for pkgconfig files") 69 70set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2" 71 CACHE STRING "Path to tinyxml2 CMake files") 72 73## CMake targets and export scripts 74 75install( 76 TARGETS tinyxml2 EXPORT tinyxml2-targets 77 RUNTIME COMPONENT tinyxml2_runtime 78 LIBRARY COMPONENT tinyxml2_runtime 79 NAMELINK_COMPONENT tinyxml2_development 80 ARCHIVE COMPONENT tinyxml2_development 81 INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" 82) 83 84# Type-specific targets 85 86if (BUILD_SHARED_LIBS) 87 set(type shared) 88else () 89 set(type static) 90endif () 91 92install( 93 EXPORT tinyxml2-targets 94 DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" 95 NAMESPACE tinyxml2:: 96 FILE tinyxml2-${type}-targets.cmake 97 COMPONENT tinyxml2_development 98) 99 100# Auto-generated version compatibility file 101write_basic_package_version_file( 102 tinyxml2-config-version.cmake 103 COMPATIBILITY SameMajorVersion 104) 105 106install( 107 FILES 108 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake" 109 "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake" 110 DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" 111 COMPONENT tinyxml2_development 112) 113 114## Headers 115 116install( 117 FILES tinyxml2.h 118 TYPE INCLUDE 119 COMPONENT tinyxml2_development 120) 121 122## pkg-config 123 124configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY) 125file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen") 126install( 127 FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc" 128 DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}" 129 COMPONENT tinyxml2_development 130) 131