CMakeLists.txt 3.5 KB

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