2 cmake_minimum_required(VERSION 3.0)
5 set (YAML_VERSION_MAJOR 0)
6 set (YAML_VERSION_MINOR 1)
7 set (YAML_VERSION_PATCH 7)
8 set (YAML_VERSION_STRING "${YAML_VERSION_MAJOR}.${YAML_VERSION_MINOR}.${YAML_VERSION_PATCH}")
10 option(BUILD_SHARED_LIBS "Build libyaml as a shared library" OFF)
13 # Output directories for a build tree
15 if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY)
16 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
20 # Install relative directories
22 if(NOT DEFINED INSTALL_LIB_DIR)
23 set(INSTALL_LIB_DIR lib)
25 if(NOT DEFINED INSTALL_BIN_DIR)
26 set(INSTALL_BIN_DIR bin)
28 if(NOT DEFINED INSTALL_INCLUDE_DIR)
29 set(INSTALL_INCLUDE_DIR include)
31 if(NOT DEFINED INSTALL_CMAKE_DIR)
32 set(INSTALL_CMAKE_DIR cmake)
49 set(config_h ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
55 add_library(yaml ${SRCS})
57 if(NOT BUILD_SHARED_LIBS)
58 set_target_properties(yaml
59 PROPERTIES OUTPUT_NAME yaml_static
63 set_target_properties(yaml
64 PROPERTIES DEFINE_SYMBOL YAML_DECLARE_EXPORT
67 target_compile_definitions(yaml
70 $<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:YAML_DECLARE_STATIC>
71 $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
74 target_include_directories(yaml PUBLIC
75 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
76 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
77 $<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
87 DESTINATION include COMPONENT Development
93 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime
94 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
95 ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
101 include(CTest) # This module defines BUILD_TESTING option
103 add_subdirectory(tests)
107 # Generate 'yamlConfig.cmake', 'yamlConfigVersion.cmake' and 'yamlTargets.cmake'
109 include(CMakePackageConfigHelpers)
111 # Configure 'yamlConfig.cmake' for a build tree
112 set(CONFIG_DIR_CONFIG ${PROJECT_BINARY_DIR})
113 set(config_file ${PROJECT_BINARY_DIR}/yamlConfig.cmake)
114 configure_package_config_file(
117 INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
118 PATH_VARS CONFIG_DIR_CONFIG
119 NO_CHECK_REQUIRED_COMPONENTS_MACRO
122 # Configure 'yamlTargets.cmake' for a build tree
124 FILE ${PROJECT_BINARY_DIR}/yamlTargets.cmake
127 # Configure and install 'yamlConfig.cmake' for an install tree
128 set(CONFIG_DIR_CONFIG ${INSTALL_CMAKE_DIR})
129 set(install_config_file ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/yamlConfig.cmake )
130 configure_package_config_file(
132 ${install_config_file}
133 INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}
134 PATH_VARS CONFIG_DIR_CONFIG
135 NO_CHECK_REQUIRED_COMPONENTS_MACRO
138 FILES ${install_config_file}
139 DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
142 # Configure and install 'yamlTargets.cmake' for an install tree
143 install(EXPORT yamlTargets
144 FILE yamlTargets.cmake
145 DESTINATION ${INSTALL_CMAKE_DIR}
146 COMPONENT Development
149 # Configure 'yamlConfigVersion.cmake' for a build tree
150 set(config_version_file ${PROJECT_BINARY_DIR}/yamlConfigVersion.cmake)
151 write_basic_package_version_file(
152 ${config_version_file}
153 VERSION ${YAML_VERSION_STRING}
154 COMPATIBILITY AnyNewerVersion
156 # ... and install for an install tree
158 FILES ${config_version_file}
159 DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development