-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathCMakeLists.txt
105 lines (87 loc) · 4.25 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
cmake_minimum_required(VERSION 3.10)
project(LDtkLoader VERSION 1.5.3.1)
if (NOT PROJECT_VERSION_TWEAK)
set(PROJECT_VERSION_TWEAK 0)
endif()
# build options
option(LDTK_NO_THROW "Replace all throws by an error print and exit" OFF)
option(LDTK_BUILD_SFML_EXAMPLE "Build an example using LDtkLoader with SFML." OFF)
option(LDTK_BUILD_SDL_EXAMPLE "Build an example using LDtkLoader with SDL." OFF)
option(LDTK_BUILD_RAYLIB_EXAMPLE "Build an example using LDtkLoader with raylib." OFF)
option(LDTK_BUILD_API_TEST "Build an example that loads a file showcasing all features of LDtk." OFF)
option(LDTK_FIELD_PUBLIC_OPTIONAL "Set to ON to enable the full optional interface on Field structures" OFF)
mark_as_advanced(LDTK_FIELD_PUBLIC_OPTIONAL)
# get source files
file(GLOB_RECURSE LDtkLoader_SRC src/*.cpp)
file(GLOB_RECURSE LDtkLoader_INC include/LDtkLoader/*.hpp)
configure_file(${PROJECT_SOURCE_DIR}/src/Version.hpp.in ${PROJECT_BINARY_DIR}/include/LDtkLoader/Version.hpp)
# create the static library target
add_library(LDtkLoader STATIC ${LDtkLoader_SRC} ${LDtkLoader_INC})
add_library(LDtkLoader::LDtkLoader ALIAS LDtkLoader)
# set compile options
if (LDTK_NO_THROW)
target_compile_definitions(LDtkLoader PUBLIC LDTK_NO_THROW JSON_NOEXCEPTION)
endif()
if (MSVC)
target_compile_definitions(LDtkLoader PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()
if (LDTK_FIELD_PUBLIC_OPTIONAL)
target_compile_definitions(LDtkLoader PRIVATE LDTK_FIELD_PUBLIC_OPTIONAL)
endif()
# set include directory for build and install
target_include_directories(LDtkLoader PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>)
target_include_directories(LDtkLoader PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>)
target_include_directories(LDtkLoader INTERFACE $<INSTALL_INTERFACE:include>)
# set library target properties
set_target_properties(LDtkLoader PROPERTIES
CXX_STANDARD 11
ARCHIVE_OUTPUT_DIRECTORY lib
DEBUG_POSTFIX -d
)
# add examples subdirectories whn requested
if (LDTK_BUILD_SFML_EXAMPLE)
message(STATUS "LDtkSFML target available.")
add_subdirectory(examples/SFML)
endif()
if (LDTK_BUILD_SDL_EXAMPLE)
message(STATUS "LDtkSDL target available.")
add_subdirectory(examples/SDL)
endif()
if (LDTK_BUILD_RAYLIB_EXAMPLE)
message(STATUS "LDtkRaylib target available.")
add_subdirectory(examples/Raylib)
endif()
if (LDTK_BUILD_API_TEST)
message(STATUS "LDtkAPI_test target available.")
add_subdirectory(examples/API_test)
endif()
# cmake install rules
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
# generate LDtkLoaderConfigVersion.cmake
write_basic_package_version_file(
"${PROJECT_BINARY_DIR}/LDtkLoaderConfigVersion.cmake"
VERSION ${CMAKE_PROJECT_VERSION}
COMPATIBILITY SameMinorVersion
)
# generate LDtkLoaderConfig.cmake
configure_package_config_file(
"cmake/LDtkLoaderConfig.cmake.in" "${PROJECT_BINARY_DIR}/LDtkLoaderConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LDtkLoader
)
# create regular installation rules
# install license and readme to ${CMAKE_INSTALL_PREFIX}/share/doc/LDtkLoader
install(FILES LICENSE.md README.md DESTINATION ${CMAKE_INSTALL_DOCDIR})
# install headers to ${CMAKE_INSTALL_PREFIX}/include
install(DIRECTORY include/LDtkLoader DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY ${PROJECT_BINARY_DIR}/include/LDtkLoader DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# install pdb files to ${CMAKE_INSTALL_PREFIX}/lib, if they exist
install(FILES $<TARGET_FILE_DIR:LDtkLoader>/$<TARGET_FILE_BASE_NAME:LDtkLoader>.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL)
# install the static library target to ${CMAKE_INSTALL_PREFIX}/lib
install(TARGETS LDtkLoader EXPORT LDtkLoaderTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(EXPORT LDtkLoaderTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LDtkLoader NAMESPACE LDtkLoader::)
# install cmake package files to ${CMAKE_INSTALL_PREFIX}/lib/cmake/LDtkLoader
install(FILES ${PROJECT_BINARY_DIR}/LDtkLoaderConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LDtkLoader)
install(FILES ${PROJECT_BINARY_DIR}/LDtkLoaderConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/LDtkLoader)
# create build-tree export cmake module
export(TARGETS LDtkLoader FILE ${PROJECT_BINARY_DIR}/LDtkLoader.cmake NAMESPACE LDtkLoader::)