cmake_minimum_required(VERSION 3.15) ################################ # set lib version here project(TinyEXIF VERSION 1.0.3) set(GENERIC_LIB_SOVERSION "1") include(GNUInstallDirs) include(CMakePackageConfigHelpers) find_package(tinyxml2 CONFIG REQUIRED) ################################ # Add definitions set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") ################################ # Add targets # By Default shared libray is being built # User can choose to build static library by using cmake -DBUILD_SHARED_LIBS:BOOL=OFF # To build the demo binary, use cmake . -DBUILD_DEMO:BOOL=ON option(BUILD_SHARED_LIBS "build as shared library" ON) option(LINK_CRT_STATIC_LIBS "link CRT static library" OFF) option(BUILD_DEMO "build demo binary" ON) add_library(TinyEXIF TinyEXIF.cpp TinyEXIF.h) add_library(TinyEXIF::TinyEXIF ALIAS TinyEXIF) if(MSVC_VERSION GREATER 1300) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251") # needs to have dll-interface endif() target_link_libraries(TinyEXIF tinyxml2::tinyxml2) set_target_properties(TinyEXIF PROPERTIES DEFINE_SYMBOL "TINYEXIF_EXPORT" VERSION "${TinyEXIF_VERSION}" SOVERSION "${GENERIC_LIB_SOVERSION}" # set MSVC runtime linkage to static if LINK_CRT_STATIC_LIBS is TRUE # LINK_CRT_STATIC_LIBS -> /MT or /MTd with Debug # NOT LINK_CRT_STATIC_LIBS -> /MD or /MDd with Debug MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>$<$>:DLL>" ) target_include_directories(TinyEXIF PUBLIC "$" "$" ) target_compile_definitions(TinyEXIF INTERFACE $<$:TINYEXIF_IMPORT> PRIVATE $<$:_CRT_SECURE_NO_WARNINGS> ) if(BUILD_DEMO) add_executable(TinyEXIFdemo main.cpp) target_link_libraries(TinyEXIFdemo TinyEXIF) endif() ################################ # Install targets install(TARGETS TinyEXIF EXPORT TinyEXIFTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install(FILES TinyEXIF.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT TinyEXIFTargets FILE TinyEXIFTargets.cmake NAMESPACE TinyEXIF:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF ) configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TinyEXIFConfig.cmake" INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TinyEXIFConfig.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF )