Обновить CMakeLists.txt

This commit is contained in:
2024-06-17 13:15:55 +04:00
parent a0f66fdf71
commit 5b695f2b64

View File

@@ -1,130 +1,134 @@
cmake_minimum_required(VERSION 3.15) cmake_minimum_required(VERSION 3.15)
project(tinyxml2 VERSION 10.0.0) project(tinyxml2 VERSION 10.0.0)
include(CTest) if(DEFINED CMAKE_TOOLCHAIN_FILE)
option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}") MESSAGE(STATUS "Using toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
endif()
##
## Honor tinyxml2_SHARED_LIBS to match install interface include(CTest)
## option(tinyxml2_BUILD_TESTING "Build tests for tinyxml2" "${BUILD_TESTING}")
if (DEFINED tinyxml2_SHARED_LIBS) ##
set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}") ## Honor tinyxml2_SHARED_LIBS to match install interface
endif () ##
## if (DEFINED tinyxml2_SHARED_LIBS)
## Main library build set(BUILD_SHARED_LIBS "${tinyxml2_SHARED_LIBS}")
## endif ()
set(CMAKE_CXX_VISIBILITY_PRESET hidden) ##
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) ## Main library build
##
add_library(tinyxml2 tinyxml2.cpp tinyxml2.h)
add_library(tinyxml2::tinyxml2 ALIAS tinyxml2) set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
# Uncomment the following line to require C++11 (or greater) to use tinyxml2
# target_compile_features(tinyxml2 PUBLIC cxx_std_11) add_library(tinyxml2 tinyxml2.cpp tinyxml2.h)
target_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>") add_library(tinyxml2::tinyxml2 ALIAS tinyxml2)
target_compile_definitions( # Uncomment the following line to require C++11 (or greater) to use tinyxml2
tinyxml2 # target_compile_features(tinyxml2 PUBLIC cxx_std_11)
PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG> target_include_directories(tinyxml2 PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")
INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT>
PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS> target_compile_definitions(
PUBLIC _FILE_OFFSET_BITS=64 tinyxml2
) PUBLIC $<$<CONFIG:Debug>:TINYXML2_DEBUG>
INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYXML2_IMPORT>
set_target_properties( PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>
tinyxml2 PUBLIC _FILE_OFFSET_BITS=64
PROPERTIES )
DEFINE_SYMBOL "TINYXML2_EXPORT"
VERSION "${tinyxml2_VERSION}" set_target_properties(
SOVERSION "${tinyxml2_VERSION_MAJOR}" tinyxml2
) PROPERTIES
DEFINE_SYMBOL "TINYXML2_EXPORT"
if (tinyxml2_BUILD_TESTING) VERSION "${tinyxml2_VERSION}"
add_executable(xmltest xmltest.cpp) SOVERSION "${tinyxml2_VERSION_MAJOR}"
target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2) )
add_test( if (tinyxml2_BUILD_TESTING)
NAME xmltest add_executable(xmltest xmltest.cpp)
COMMAND xmltest target_link_libraries(xmltest PRIVATE tinyxml2::tinyxml2)
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
) add_test(
NAME xmltest
set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0") COMMAND xmltest
endif () WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
##
## Installation set_tests_properties(xmltest PROPERTIES PASS_REGULAR_EXPRESSION ", Fail 0")
## endif ()
## Standard modules ##
include(GNUInstallDirs) ## Installation
include(CMakePackageConfigHelpers) ##
## Custom locations ## Standard modules
set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" include(GNUInstallDirs)
CACHE PATH "Directory for pkgconfig files") include(CMakePackageConfigHelpers)
set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2" ## Custom locations
CACHE STRING "Path to tinyxml2 CMake files") set(tinyxml2_INSTALL_PKGCONFIGDIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
CACHE PATH "Directory for pkgconfig files")
## CMake targets and export scripts
set(tinyxml2_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tinyxml2"
install( CACHE STRING "Path to tinyxml2 CMake files")
TARGETS tinyxml2 EXPORT tinyxml2-targets
RUNTIME COMPONENT tinyxml2_runtime ## CMake targets and export scripts
LIBRARY COMPONENT tinyxml2_runtime
NAMELINK_COMPONENT tinyxml2_development install(
ARCHIVE COMPONENT tinyxml2_development TARGETS tinyxml2 EXPORT tinyxml2-targets
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" RUNTIME COMPONENT tinyxml2_runtime
) LIBRARY COMPONENT tinyxml2_runtime
NAMELINK_COMPONENT tinyxml2_development
# Type-specific targets ARCHIVE COMPONENT tinyxml2_development
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
if (BUILD_SHARED_LIBS) )
set(type shared)
else () # Type-specific targets
set(type static)
endif () if (BUILD_SHARED_LIBS)
set(type shared)
install( else ()
EXPORT tinyxml2-targets set(type static)
DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" endif ()
NAMESPACE tinyxml2::
FILE tinyxml2-${type}-targets.cmake install(
COMPONENT tinyxml2_development EXPORT tinyxml2-targets
) DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}"
NAMESPACE tinyxml2::
# Auto-generated version compatibility file FILE tinyxml2-${type}-targets.cmake
write_basic_package_version_file( COMPONENT tinyxml2_development
tinyxml2-config-version.cmake )
COMPATIBILITY SameMajorVersion
) # Auto-generated version compatibility file
write_basic_package_version_file(
install( tinyxml2-config-version.cmake
FILES COMPATIBILITY SameMajorVersion
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake" )
"${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake"
DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}" install(
COMPONENT tinyxml2_development FILES
) "${CMAKE_CURRENT_SOURCE_DIR}/cmake/tinyxml2-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/tinyxml2-config-version.cmake"
## Headers DESTINATION "${tinyxml2_INSTALL_CMAKEDIR}"
COMPONENT tinyxml2_development
install( )
FILES tinyxml2.h
TYPE INCLUDE ## Headers
COMPONENT tinyxml2_development
) install(
FILES tinyxml2.h
## pkg-config TYPE INCLUDE
COMPONENT tinyxml2_development
configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY) )
file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen")
install( ## pkg-config
FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc"
DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}" configure_file(cmake/tinyxml2.pc.in tinyxml2.pc.gen @ONLY)
COMPONENT tinyxml2_development file(GENERATE OUTPUT tinyxml2.pc INPUT "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc.gen")
) install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc"
DESTINATION "${tinyxml2_INSTALL_PKGCONFIGDIR}"
COMPONENT tinyxml2_development
)