1
0
mirror of https://github.com/cdcseacave/TinyEXIF.git synced 2026-07-21 19:23:01 +04:00

Update CMake project (#23)

This commit is contained in:
Azamat H. Hackimov
2025-11-17 18:48:29 +03:00
committed by GitHub
parent e5d0e39a9b
commit 47dbeaca48
5 changed files with 133 additions and 155 deletions
+34
View File
@@ -0,0 +1,34 @@
name: build
on:
- push
- pull_request
jobs:
build:
name: "${{ matrix.os }} - BUILD_SHARED_LIBS=${{ matrix.shared_lib }}"
strategy:
fail-fast: false
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
shared_lib:
- ON
- OFF
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: lukka/get-cmake@v3.28.4
- uses: lukka/run-vcpkg@v11
- name: Build with -DBUILD_SHARED_LIBS=${{ matrix.shared_lib }}
uses: lukka/run-cmake@v10
with:
configurePreset: "vcpkg"
configurePresetAdditionalArgs: "[
'-DBUILD_SHARED_LIBS=${{ matrix.shared_lib }}',
'-DBUILD_DEMO=ON'
]"
buildPreset: "vcpkg"
buildPresetAdditionalArgs: "[ '--config Release' ]"
+52 -153
View File
@@ -1,187 +1,86 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.15)
project(TinyEXIF)
include(GNUInstallDirs)
find_package(tinyxml2 REQUIRED)
#CMAKE_BUILD_TOOL
################################ ################################
# set lib version here # set lib version here
project(TinyEXIF VERSION 1.0.3)
set(GENERIC_LIB_VERSION "1.0.3")
set(GENERIC_LIB_SOVERSION "1") set(GENERIC_LIB_SOVERSION "1")
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
find_package(tinyxml2 CONFIG REQUIRED)
################################ ################################
# Add definitions # Add definitions
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
################################ ################################
# Add targets # Add targets
# By Default shared libray is being built # By Default shared libray is being built
# To build static libs also - Do cmake . -DBUILD_STATIC_LIBS:BOOL=ON # User can choose to build static library by using cmake -DBUILD_SHARED_LIBS:BOOL=OFF
# User can choose not to build shared library by using cmake -DBUILD_SHARED_LIBS:BOOL=OFF
# To build only static libs use cmake . -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_STATIC_LIBS:BOOL=ON
# To build the demo binary, use cmake . -DBUILD_DEMO:BOOL=ON # To build the demo binary, use cmake . -DBUILD_DEMO:BOOL=ON
option(BUILD_SHARED_LIBS "build as shared library" ON) option(BUILD_SHARED_LIBS "build as shared library" ON)
option(BUILD_STATIC_LIBS "build as static library" OFF)
option(LINK_CRT_STATIC_LIBS "link CRT static library" OFF) option(LINK_CRT_STATIC_LIBS "link CRT static library" OFF)
option(BUILD_DEMO "build demo binary" ON) option(BUILD_DEMO "build demo binary" ON)
# set MSVC runtime linkage to static or dynamic add_library(TinyEXIF TinyEXIF.cpp TinyEXIF.h)
# as in: https://stackoverflow.com/questions/10113017/setting-the-msvc-runtime-in-cmake add_library(TinyEXIF::TinyEXIF ALIAS TinyEXIF)
macro(configure_runtime CRT_RUNTIME)
if(MSVC)
# Default to statically-linked runtime.
if("${CRT_RUNTIME}" STREQUAL "")
set(CRT_RUNTIME "static")
endif()
# Set compiler options.
set(variables
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_RELWITHDEBINFO
)
if(${CRT_RUNTIME} STREQUAL "static")
message(STATUS "MSVC -> forcing use of statically-linked runtime.")
foreach(variable ${variables})
if(${variable} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${variable} "${${variable}}")
endif()
endforeach()
else()
message(STATUS "MSVC -> forcing use of dynamically-linked runtime.")
foreach(variable ${variables})
if(${variable} MATCHES "/MT")
string(REGEX REPLACE "/MT" "/MD" ${variable} "${${variable}}")
endif()
endforeach()
endif()
endif()
endmacro()
if(LINK_CRT_STATIC_LIBS) if(MSVC_VERSION GREATER 1300)
# set MSVC runtime linkage to static
configure_runtime("static")
endif()
# to distinguish between debug and release lib
set(CMAKE_DEBUG_POSTFIX "d")
if(BUILD_SHARED_LIBS)
add_library(TinyEXIF SHARED TinyEXIF.cpp TinyEXIF.h)
if(MSVC_VERSION GREATER 1300)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251") # needs to have dll-interface 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
COMPILE_DEFINITIONS "TINYEXIF_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(TinyEXIF PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
if(MSVC)
target_compile_definitions(TinyEXIF PUBLIC _CRT_SECURE_NO_WARNINGS)
endif()
else()
include_directories(${PROJECT_SOURCE_DIR})
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
endif()
# export targets for find_package config mode
export(TARGETS TinyEXIF
FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
install(TARGETS TinyEXIF
EXPORT ${CMAKE_PROJECT_NAME}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif() endif()
if(BUILD_STATIC_LIBS) target_link_libraries(TinyEXIF tinyxml2::tinyxml2)
add_library(TinyEXIFstatic STATIC TinyEXIF.cpp TinyEXIF.h) 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$<$<CONFIG:Debug>:Debug>$<$<NOT:$<BOOL:${LINK_CRT_STATIC_LIBS}>>:DLL>"
)
target_link_libraries(TinyEXIFstatic tinyxml2::tinyxml2) target_include_directories(TinyEXIF PUBLIC
set_target_properties(TinyEXIFstatic PROPERTIES "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
OUTPUT_NAME TinyEXIF "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
VERSION "${GENERIC_LIB_VERSION}" )
SOVERSION "${GENERIC_LIB_SOVERSION}")
if(DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") target_compile_definitions(TinyEXIF
target_include_directories(TinyEXIFstatic PUBLIC INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:TINYEXIF_IMPORT>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> PRIVATE $<$<CXX_COMPILER_ID:MSVC>:_CRT_SECURE_NO_WARNINGS>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>) )
if(MSVC)
target_compile_definitions(TinyEXIFstatic PUBLIC _CRT_SECURE_NO_WARNINGS)
endif()
else()
include_directories(${PROJECT_SOURCE_DIR})
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
endif()
# export targets for find_package config mode
export(TARGETS TinyEXIFstatic
FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
install(TARGETS TinyEXIFstatic
EXPORT ${CMAKE_PROJECT_NAME}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
if(BUILD_DEMO) if(BUILD_DEMO)
add_executable(TinyEXIFdemo main.cpp) add_executable(TinyEXIFdemo main.cpp)
if(BUILD_SHARED_LIBS)
add_dependencies(TinyEXIFdemo TinyEXIF)
target_link_libraries(TinyEXIFdemo TinyEXIF) target_link_libraries(TinyEXIFdemo TinyEXIF)
target_compile_definitions(TinyEXIFdemo PRIVATE TINYEXIF_IMPORT)
else(BUILD_STATIC_LIBS)
add_dependencies(TinyEXIFdemo TinyEXIFstatic)
target_link_libraries(TinyEXIFdemo TinyEXIFstatic tinyxml2::tinyxml2)
endif()
endif() 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(FILES TinyEXIF.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
foreach(p LIB INCLUDE) install(EXPORT TinyEXIFTargets
set(var CMAKE_INSTALL_${p}DIR) FILE TinyEXIFTargets.cmake
if(NOT IS_ABSOLUTE "${${var}}") NAMESPACE TinyEXIF::
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF
endif() )
endforeach()
file(WRITE configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Config.cmake.in
${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake "${CMAKE_CURRENT_BINARY_DIR}/TinyEXIFConfig.cmake"
"include(\${CMAKE_CURRENT_LIST_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)\n") INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF
)
install(FILES install(FILES "${CMAKE_CURRENT_BINARY_DIR}/TinyEXIFConfig.cmake"
${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/TinyEXIF
DESTINATION lib/cmake/${CMAKE_PROJECT_NAME}) )
install(EXPORT ${CMAKE_PROJECT_NAME}Targets
DESTINATION lib/cmake/${CMAKE_PROJECT_NAME})
+28
View File
@@ -0,0 +1,28 @@
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 15,
"patch": 0
},
"configurePresets": [
{
"name": "vcpkg",
"binaryDir": "${sourceDir}/builds/${presetName}",
"generator": "Ninja Multi-Config",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": {
"type": "FILEPATH",
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
}
}
}
],
"buildPresets": [
{
"name": "vcpkg",
"configurePreset": "vcpkg"
}
]
}
+8
View File
@@ -0,0 +1,8 @@
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
find_dependency(tinyxml2)
include("${CMAKE_CURRENT_LIST_DIR}/TinyEXIFTargets.cmake")
check_required_components(TinyEXIF)
+9
View File
@@ -0,0 +1,9 @@
{
"name": "tinyexif",
"version-string": "1.0.3",
"builtin-baseline": "74e6536215718009aae747d86d84b78376bf9e09",
"dependencies": [
"tinyxml2"
]
}