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}>
86 DESTINATION include COMPONENT Development
92 RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT Runtime
93 LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
94 ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT Development
100 include(CTest) # This module defines BUILD_TESTING option
102 add_subdirectory(tests)
106 # Generate 'yamlConfig.cmake', 'yamlConfigVersion.cmake' and 'yamlTargets.cmake'
108 include(CMakePackageConfigHelpers)
110 # Configure 'yamlConfig.cmake' for a build tree
111 set(CONFIG_DIR_CONFIG ${PROJECT_BINARY_DIR})
112 set(config_file ${PROJECT_BINARY_DIR}/yamlConfig.cmake)
113 configure_package_config_file(
116 INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
117 PATH_VARS CONFIG_DIR_CONFIG
118 NO_CHECK_REQUIRED_COMPONENTS_MACRO
121 # Configure 'yamlTargets.cmake' for a build tree
123 FILE ${PROJECT_BINARY_DIR}/yamlTargets.cmake
126 # Configure and install 'yamlConfig.cmake' for an install tree
127 set(CONFIG_DIR_CONFIG ${INSTALL_CMAKE_DIR})
128 set(install_config_file ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/yamlConfig.cmake )
129 configure_package_config_file(
131 ${install_config_file}
132 INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}
133 PATH_VARS CONFIG_DIR_CONFIG
134 NO_CHECK_REQUIRED_COMPONENTS_MACRO
137 FILES ${install_config_file}
138 DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development
141 # Configure and install 'yamlTargets.cmake' for an install tree
142 install(EXPORT yamlTargets
143 FILE yamlTargets.cmake
144 DESTINATION ${INSTALL_CMAKE_DIR}
145 COMPONENT Development
148 # Configure 'yamlConfigVersion.cmake' for a build tree
149 set(config_version_file ${PROJECT_BINARY_DIR}/yamlConfigVersion.cmake)
150 write_basic_package_version_file(
151 ${config_version_file}
152 VERSION ${YAML_VERSION_STRING}
153 COMPATIBILITY AnyNewerVersion
155 # ... and install for an install tree
157 FILES ${config_version_file}
158 DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Development