mirror of
https://github.com/AxioDL/tinyxml2.git
synced 2025-05-16 20:31:26 +00:00
Turn on options to tell CMake to use -fvisibility=hidden by default (on applicable platforms). This has some optimization benefits, and more closely mirrors the Windows behavior of only exporting symbols marked for export, which can help catch errors doing so on non-Windows platforms. This requires CMake 2.8.12 to be effective. (Otherwise, the logic will simply have no effect.)
140 lines
4.6 KiB
CMake
140 lines
4.6 KiB
CMake
IF(BIICODE)
|
|
ADD_BIICODE_TARGETS()
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/resources)
|
|
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
|
ENDIF()
|
|
RETURN()
|
|
ENDIF(BIICODE)
|
|
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
|
|
cmake_policy(VERSION 2.6)
|
|
|
|
project(tinyxml2)
|
|
include(GNUInstallDirs)
|
|
#enable_testing()
|
|
|
|
#CMAKE_BUILD_TOOL
|
|
|
|
################################
|
|
# set lib version here
|
|
|
|
set(GENERIC_LIB_VERSION "4.0.1")
|
|
set(GENERIC_LIB_SOVERSION "4")
|
|
|
|
|
|
################################
|
|
# Add common source
|
|
|
|
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/.")
|
|
|
|
################################
|
|
# Add custom target to copy all data
|
|
|
|
set(TARGET_DATA_COPY DATA_COPY)
|
|
set(DATA_COPY_FILES)
|
|
if(NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
|
|
foreach(data dream.xml empty.xml utf8test.xml utf8testverify.xml)
|
|
set(DATA_COPY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/resources/${data})
|
|
set(DATA_COPY_DEST ${CMAKE_CURRENT_BINARY_DIR}/resources/${data})
|
|
add_custom_command(
|
|
OUTPUT ${DATA_COPY_DEST}
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -E copy ${DATA_COPY_SRC} ${DATA_COPY_DEST}
|
|
DEPENDS ${DATA_COPY_SRC})
|
|
list(APPEND DATA_COPY_FILES ${DATA_COPY_DEST})
|
|
endforeach(data)
|
|
endif(NOT ${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
|
|
add_custom_target(${TARGET_DATA_COPY} DEPENDS ${DATA_COPY_FILES})
|
|
|
|
################################
|
|
# Add definitions
|
|
|
|
if(MSVC)
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
endif(MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
|
|
|
|
################################
|
|
# Add targets
|
|
# By Default shared libray is being built
|
|
# To build static libs also - Do cmake . -DBUILD_STATIC_LIBS:BOOL=ON
|
|
# User can choose not to build shared library by using cmake -BUILD_SHARED_LIBS:BOOL:OFF
|
|
# To build only static libs use cmake . -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_STATIC_LIBS:BOOL=ON
|
|
|
|
option(BUILD_SHARED_LIBS "build as shared library" ON)
|
|
option(BUILD_STATIC_LIBS "build as static library" OFF)
|
|
|
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
|
|
|
|
if(BUILD_SHARED_LIBS)
|
|
add_library(tinyxml2 SHARED tinyxml2.cpp tinyxml2.h)
|
|
|
|
set_target_properties(tinyxml2 PROPERTIES
|
|
COMPILE_DEFINITIONS "TINYXML2_EXPORT"
|
|
VERSION "${GENERIC_LIB_VERSION}"
|
|
SOVERSION "${GENERIC_LIB_SOVERSION}")
|
|
|
|
if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
|
|
target_include_directories(tinyxml2 INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/.")
|
|
endif()
|
|
|
|
install(TARGETS tinyxml2
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
if(BUILD_STATIC_LIBS)
|
|
add_library(tinyxml2_static STATIC tinyxml2.cpp tinyxml2.h)
|
|
set_target_properties(tinyxml2_static PROPERTIES
|
|
COMPILE_DEFINITONS "TINYXML2_EXPORT"
|
|
VERSION "${GENERIC_LIB_VERSION}"
|
|
SOVERSION "${GENERIC_LIB_SOVERSION}")
|
|
set_target_properties( tinyxml2_static PROPERTIES OUTPUT_NAME tinyxml2 )
|
|
|
|
if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11")
|
|
target_include_directories(tinyxml2_static INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/.")
|
|
endif()
|
|
|
|
install(TARGETS tinyxml2_static
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
add_executable(xmltest xmltest.cpp)
|
|
if(BUILD_SHARED_LIBS)
|
|
add_dependencies(xmltest tinyxml2)
|
|
add_dependencies(xmltest ${TARGET_DATA_COPY})
|
|
target_link_libraries(xmltest tinyxml2)
|
|
else(BUILD_STATIC_LIBS)
|
|
add_dependencies(xmltest tinyxml2_static)
|
|
add_dependencies(xmltest ${TARGET_DATA_COPY})
|
|
target_link_libraries(xmltest tinyxml2_static)
|
|
endif()
|
|
install(TARGETS DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
install(FILES tinyxml2.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
|
|
foreach(p LIB INCLUDE)
|
|
set(var CMAKE_INSTALL_${p}DIR)
|
|
if(NOT IS_ABSOLUTE "${${var}}")
|
|
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
|
|
endif()
|
|
endforeach()
|
|
|
|
configure_file(tinyxml2.pc.in tinyxml2.pc @ONLY)
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/tinyxml2.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
#add_test(xmltest ${SAMPLE_NAME} COMMAND $<TARGET_FILE:${SAMPLE_NAME}>)
|
|
|
|
# uninstall target
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|