CMakeLists.txt (5095B)
1 IF(BIICODE) 2 ADD_BIICODE_TARGETS() 3 if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/resources) 4 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) 5 ENDIF() 6 RETURN() 7 ENDIF(BIICODE) 8 cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 9 cmake_policy(VERSION 2.6) 10 if(POLICY CMP0063) 11 cmake_policy(SET CMP0063 OLD) 12 endif() 13 14 project(tinyxml2) 15 include(GNUInstallDirs) 16 include(CTest) 17 #enable_testing() 18 19 #CMAKE_BUILD_TOOL 20 21 ################################ 22 # set lib version here 23 24 set(GENERIC_LIB_VERSION "8.0.0") 25 set(GENERIC_LIB_SOVERSION "8") 26 27 ################################ 28 # Add definitions 29 30 ################################ 31 # Add targets 32 # By Default shared library is being built 33 # To build static libs also - Do cmake . -DBUILD_STATIC_LIBS:BOOL=ON 34 # User can choose not to build shared library by using cmake -DBUILD_SHARED_LIBS:BOOL=OFF 35 # To build only static libs use cmake . -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_STATIC_LIBS:BOOL=ON 36 # To build the tests, use cmake . -DBUILD_TESTS:BOOL=ON 37 # To disable the building of the tests, use cmake . -DBUILD_TESTS:BOOL=OFF 38 39 option(BUILD_SHARED_LIBS "build as shared library" ON) 40 option(BUILD_TESTS "build xmltest (deprecated: Use BUILD_TESTING)" ON) 41 42 # To allow using tinyxml in another shared library 43 set(CMAKE_POSITION_INDEPENDENT_CODE ON) 44 45 set(CMAKE_CXX_VISIBILITY_PRESET hidden) 46 set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) 47 48 # to distinguish between debug and release lib 49 set(CMAKE_DEBUG_POSTFIX "d") 50 51 add_library(tinyxml2 tinyxml2.cpp tinyxml2.h) 52 53 set_target_properties(tinyxml2 PROPERTIES 54 COMPILE_DEFINITIONS "TINYXML2_EXPORT" 55 VERSION "${GENERIC_LIB_VERSION}" 56 SOVERSION "${GENERIC_LIB_SOVERSION}") 57 58 target_compile_definitions(tinyxml2 PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG>) 59 60 if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") 61 target_include_directories(tinyxml2 PUBLIC 62 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> 63 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 64 65 if(MSVC) 66 target_compile_definitions(tinyxml2 PUBLIC -D_CRT_SECURE_NO_WARNINGS) 67 endif(MSVC) 68 else() 69 include_directories(${PROJECT_SOURCE_DIR}) 70 71 if(MSVC) 72 add_definitions(-D_CRT_SECURE_NO_WARNINGS) 73 endif(MSVC) 74 endif() 75 76 # export targets for find_package config mode 77 export(TARGETS tinyxml2 78 FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake) 79 80 install(TARGETS tinyxml2 81 EXPORT ${CMAKE_PROJECT_NAME}Targets 82 RUNTIME 83 DESTINATION ${CMAKE_INSTALL_BINDIR} 84 COMPONENT tinyxml2_runtime 85 LIBRARY 86 DESTINATION ${CMAKE_INSTALL_LIBDIR} 87 COMPONENT tinyxml2_libraries 88 ARCHIVE 89 DESTINATION ${CMAKE_INSTALL_LIBDIR} 90 COMPONENT tinyxml2_libraries) 91 92 if(BUILD_TESTING AND BUILD_TESTS) 93 add_executable(xmltest xmltest.cpp) 94 add_dependencies(xmltest tinyxml2) 95 target_link_libraries(xmltest tinyxml2) 96 97 # Copy test resources and create test output directory 98 add_custom_command(TARGET xmltest POST_BUILD 99 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/resources $<TARGET_FILE_DIR:xmltest>/resources 100 COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:xmltest>/resources/out 101 COMMENT "Configuring xmltest resources directory: ${CMAKE_CURRENT_BINARY_DIR}/resources" 102 ) 103 104 add_test(NAME xmltest COMMAND xmltest WORKING_DIRECTORY $<TARGET_FILE_DIR:xmltest>) 105 endif() 106 107 install(FILES tinyxml2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT tinyxml2_headers) 108 109 configure_file(tinyxml2.pc.in tinyxml2.pc @ONLY) 110 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT tinyxml2_config) 111 112 # uninstall target 113 if(NOT TARGET uninstall) 114 configure_file( 115 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" 116 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" 117 IMMEDIATE @ONLY) 118 119 add_custom_target(uninstall 120 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 121 endif() 122 123 include(CMakePackageConfigHelpers) 124 set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") 125 configure_package_config_file( 126 "Config.cmake.in" 127 "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake" 128 INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME}" 129 ) 130 write_basic_package_version_file( 131 "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake" 132 VERSION ${GENERIC_LIB_VERSION} 133 COMPATIBILITY SameMajorVersion 134 ) 135 install(FILES 136 ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake 137 ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}ConfigVersion.cmake 138 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} 139 COMPONENT tinyxml2_config) 140 141 install(EXPORT ${CMAKE_PROJECT_NAME}Targets NAMESPACE tinyxml2:: 142 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} 143 COMPONENT tinyxml2_config)