Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
yaml-cpp
Commits
04bc13ca
Commit
04bc13ca
authored
Mar 02, 2011
by
Jesse Beder
Browse files
Merged CMakeLists.txt from issue 87 - now it's cleaner, and supports Windows much better
parent
c65a7dfc
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
244 additions
and
82 deletions
+244
-82
CMakeLists.txt
CMakeLists.txt
+244
-82
No files found.
CMakeLists.txt
View file @
04bc13ca
cmake_minimum_required
(
VERSION 2.6
)
project
(
YAML_CPP
)
set
(
LIB_TYPE SHARED
)
if
(
IPHONE
)
set
(
CMAKE_OSX_SYSROOT iphoneos4.2
)
set
(
CMAKE_OSX_ARCHITECTURES
"armv6;armv7"
)
set
(
LIB_TYPE
)
endif
(
IPHONE
)
if
(
CMAKE_COMPILER_IS_GNUCC
)
set
(
CMAKE_CXX_FLAGS
"-O2 -Wall -Wextra -pedantic -Wno-long-long
${
CMAKE_CXX_FLAGS
}
"
)
endif
(
CMAKE_COMPILER_IS_GNUCC
)
if
(
MSVC
)
set
(
LIB_TYPE
)
# I can't figure out how CMake handles Windows shared libraries
set
(
CMAKE_CXX_FLAGS
"/W3 /wd4127 /wd4355 /D_SCL_SECURE_NO_WARNINGS
${
CMAKE_CXX_FLAGS
}
"
)
endif
(
MSVC
)
set
(
YAML_CPP_VERSION_MAJOR
"0"
)
set
(
YAML_CPP_VERSION_MINOR
"2"
)
set
(
YAML_CPP_VERSION_PATCH
"5"
)
set
(
YAML_CPP_VERSION
"
${
YAML_CPP_VERSION_MAJOR
}
.
${
YAML_CPP_VERSION_MINOR
}
.
${
YAML_CPP_VERSION_PATCH
}
"
)
enable_testing
()
option
(
YAML_CPP_BUILD_TOOLS
"Enables or disables testing and parse tools"
true
)
if
(
WIN32
)
set
(
_library_dir bin
)
# .dll are in PATH, like executables
else
(
WIN32
)
set
(
_library_dir lib
)
endif
(
WIN32
)
set
(
INCLUDE_INSTALL_DIR include/yaml-cpp
)
set
(
LIB_INSTALL_DIR
${
_library_dir
}${
LIB_SUFFIX
}
)
#
set
(
_INSTALL_DESTINATIONS
RUNTIME DESTINATION bin
LIBRARY DESTINATION
${
LIB_INSTALL_DIR
}
ARCHIVE DESTINATION lib
${
LIB_SUFFIX
}
)
#
file
(
GLOB public_headers include/yaml-cpp/[a-z]*.h
)
file
(
GLOB private_headers src/[a-z]*.h
)
file
(
GLOB sources src/[a-z]*.cpp
)
include_directories
(
${
YAML_CPP_SOURCE_DIR
}
/include
)
add_library
(
yaml-cpp
${
LIB_TYPE
}
${
public_headers
}
${
private_headers
}
${
sources
}
)
set_target_properties
(
yaml-cpp PROPERTIES
VERSION
"
${
YAML_CPP_VERSION
}
"
SOVERSION
"
${
YAML_CPP_VERSION_MAJOR
}
.
${
YAML_CPP_VERSION_MINOR
}
"
)
if
(
IPHONE
)
set_target_properties
(
yaml-cpp PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET
"3.0"
)
endif
(
IPHONE
)
install
(
TARGETS yaml-cpp
${
_INSTALL_DESTINATIONS
}
)
install
(
FILES
${
public_headers
}
DESTINATION
${
INCLUDE_INSTALL_DIR
}
)
if
(
UNIX
)
set
(
PC_FILE
${
CMAKE_BINARY_DIR
}
/yaml-cpp.pc
)
configure_file
(
"yaml-cpp.pc.cmake"
${
PC_FILE
}
@ONLY
)
install
(
FILES
${
PC_FILE
}
DESTINATION
${
LIB_INSTALL_DIR
}
/pkgconfig
)
endif
(
UNIX
)
if
(
YAML_CPP_BUILD_TOOLS
)
add_subdirectory
(
test
)
add_subdirectory
(
util
)
endif
(
YAML_CPP_BUILD_TOOLS
)
###
### CMake settings
###
## Due to Mac OSX we need to keep compatibility with CMake 2.6
# see http://www.cmake.org/Wiki/CMake_Policies
cmake_minimum_required
(
VERSION 2.6
)
# see http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0012
if
(
POLICY CMP0012
)
cmake_policy
(
SET CMP0012 OLD
)
endif
()
# see http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0015
if
(
POLICY CMP0015
)
cmake_policy
(
SET CMP0015 OLD
)
endif
()
include
(
CheckCXXCompilerFlag
)
###
### Project settings
###
project
(
YAML_CPP
)
set
(
YAML_CPP_VERSION_MAJOR
"0"
)
set
(
YAML_CPP_VERSION_MINOR
"2"
)
set
(
YAML_CPP_VERSION_PATCH
"5"
)
set
(
YAML_CPP_VERSION
"
${
YAML_CPP_VERSION_MAJOR
}
.
${
YAML_CPP_VERSION_MINOR
}
.
${
YAML_CPP_VERSION_PATCH
}
"
)
enable_testing
()
###
### Project options
###
## Project stuff
option
(
YAML_CPP_BUILD_TOOLS
"Enable testing and parse tools"
ON
)
## Build options
# --> General
# see http://www.cmake.org/cmake/help/cmake2.6docs.html#variable:BUILD_SHARED_LIBS
# http://www.cmake.org/cmake/help/cmake2.6docs.html#command:add_library
option
(
BUILD_SHARED_LIBS
"Build Shared Libraries"
OFF
)
# --> Apple
option
(
APPLE_UNIVERSAL_BIN
"Apple: Build universal binary"
OFF
)
# --> Microsoft Visual C++
# see http://msdn.microsoft.com/en-us/library/aa278396(v=VS.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=VS.71).aspx
option
(
MSVC_SHARED_RT
"MSVC: Build with shared runtime libs (/MD)"
ON
)
option
(
MSVC_STHREADED_RT
"MSVC: Build with single-threaded static runtime libs (/ML until VS .NET 2003)"
OFF
)
###
### Sources, headers, directories and libs
###
file
(
GLOB sources
"src/[a-zA-Z]*.cpp"
)
file
(
GLOB public_headers
"include/yaml-cpp/[a-zA-Z]*.h"
)
file
(
GLOB private_headers
"src/[a-zA-Z]*.h"
)
if
(
VERBOSE
)
message
(
STATUS
"sources:
${
sources
}
"
)
message
(
STATUS
"public_headers:
${
public_headers
}
"
)
message
(
STATUS
"private_headers:
${
private_headers
}
"
)
endif
()
include_directories
(
${
YAML_CPP_SOURCE_DIR
}
/include
)
###
### General compilation settings
###
if
(
BUILD_SHARED_LIBS
)
set
(
LABEL_SUFFIX
"shared"
)
else
()
set
(
LABEL_SUFFIX
"static"
)
endif
()
if
(
APPLE
)
if
(
APPLE_UNIVERSAL_BIN
)
set
(
CMAKE_OSX_ARCHITECTURES ppc;i386
)
endif
()
endif
()
if
(
IPHONE
)
set
(
CMAKE_OSX_SYSROOT
"iphoneos4.2"
)
set
(
CMAKE_OSX_ARCHITECTURES
"armv6;armv7"
)
endif
()
if
(
WIN32
)
if
(
BUILD_SHARED_LIBS
)
add_definitions
(
-D
${
PROJECT_NAME
}
_DLL
)
# use or build Windows DLL
endif
()
if
(
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
)
set
(
CMAKE_INSTALL_PREFIX
"C:/"
)
endif
()
endif
()
# GCC specialities
if
(
CMAKE_COMPILER_IS_GNUCXX
)
### General stuff
if
(
WIN32
)
set
(
CMAKE_SHARED_LIBRARY_PREFIX
""
)
# DLLs do not have a "lib" prefix
set
(
CMAKE_IMPORT_LIBRARY_PREFIX
""
)
# same for DLL import libs
set
(
CMAKE_LINK_DEF_FILE_FLAG
""
)
# CMake workaround (2.8.3)
endif
()
### Project stuff
set
(
GCC_EXTRA_OPTIONS
""
)
#
set
(
FLAG_TESTED
"-Wextra"
)
check_cxx_compiler_flag
(
${
FLAG_TESTED
}
FLAG_WEXTRA
)
if
(
FLAG_WEXTRA
)
set
(
GCC_EXTRA_OPTIONS
"
${
GCC_EXTRA_OPTIONS
}
${
FLAG_TESTED
}
"
)
endif
()
#
set
(
CMAKE_CXX_FLAGS
"-O2 -Wall
${
GCC_EXTRA_OPTIONS
}
-pedantic -Wno-long-long
${
CMAKE_CXX_FLAGS
}
"
)
endif
()
# Microsoft VisualC++ specialities
if
(
MSVC
)
### General stuff
# a) Change MSVC runtime library settings (/MD[d], /MT[d], /ML[d] (single-threaded until VS 2003))
# plus set lib suffix for later use and project label accordingly
# see http://msdn.microsoft.com/en-us/library/aa278396(v=VS.60).aspx
# http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=VS.71).aspx
set
(
LIB_RT_SUFFIX
"md"
)
# CMake defaults to /MD for MSVC
set
(
LIB_RT_OPTION
"/MD"
)
#
if
(
NOT MSVC_SHARED_RT
)
# User wants to have static runtime libraries (/MT, /ML)
if
(
MSVC_STHREADED_RT
)
# User wants to have old single-threaded static runtime libraries
set
(
LIB_RT_SUFFIX
"ml"
)
set
(
LIB_RT_OPTION
"/ML"
)
if
(
NOT
${
MSVC_VERSION
}
LESS 1400
)
message
(
FATAL_ERROR
"Single-threaded static runtime libraries (/ML) only available until VS .NET 2003 (7.1)."
)
endif
()
else
()
set
(
LIB_RT_SUFFIX
"mt"
)
set
(
LIB_RT_OPTION
"/MT"
)
endif
()
# correct linker options
foreach
(
flag_var CMAKE_C_FLAGS CMAKE_CXX_FLAGS
)
foreach
(
config_name
""
DEBUG RELEASE MINSIZEREL RELWITHDEBINFO
)
set
(
var_name
"
${
flag_var
}
"
)
if
(
NOT
"
${
config_name
}
"
STREQUAL
""
)
set
(
var_name
"
${
var_name
}
_
${
config_name
}
"
)
endif
()
string
(
REPLACE
"/MD"
"
${
LIB_RT_OPTION
}
"
${
var_name
}
"
${${
var_name
}}
"
)
endforeach
()
endforeach
()
endif
()
#
set
(
LABEL_SUFFIX
"
${
LABEL_SUFFIX
}
${
LIB_RT_OPTION
}
"
)
# b) Change prefix for static libraries
set
(
CMAKE_STATIC_LIBRARY_PREFIX
"lib"
)
# to distinguish static libraries from DLL import libs
# c) Correct suffixes for static libraries
if
(
NOT BUILD_SHARED_LIBS
)
### General stuff
set
(
LIB_TARGET_SUFFIX
"
${
LIB_SUFFIX
}${
LIB_RT_SUFFIX
}
"
)
endif
()
### Project stuff
# /W3 = set warning level; see http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
# /wd4127 = disable warning C4127 "conditional expression is constant"; see http://msdn.microsoft.com/en-us/library/6t66728h.aspx
# /wd4355 = disable warning C4355 "'this' : used in base member initializer list"; http://msdn.microsoft.com/en-us/library/3c594ae3.aspx
set
(
CMAKE_CXX_FLAGS
"/W3 /wd4127 /wd4355 /D_SCL_SECURE_NO_WARNINGS
${
CMAKE_CXX_FLAGS
}
"
)
endif
()
###
### General install settings
###
if
(
WIN32
)
set
(
_library_dir bin
)
# .dll are in PATH, like executables
else
()
set
(
_library_dir lib
)
endif
()
set
(
INCLUDE_INSTALL_DIR include/yaml-cpp
)
set
(
LIB_INSTALL_DIR
"
${
_library_dir
}${
LIB_SUFFIX
}
"
)
set
(
_INSTALL_DESTINATIONS
RUNTIME DESTINATION bin
LIBRARY DESTINATION
${
LIB_INSTALL_DIR
}
ARCHIVE DESTINATION
"lib
${
LIB_SUFFIX
}
"
)
###
### Library
###
add_library
(
yaml-cpp
${
sources
}
${
public_headers
}
${
private_headers
}
)
set_target_properties
(
yaml-cpp PROPERTIES
VERSION
"
${
YAML_CPP_VERSION
}
"
SOVERSION
"
${
YAML_CPP_VERSION_MAJOR
}
.
${
YAML_CPP_VERSION_MINOR
}
"
PROJECT_LABEL
"yaml-cpp
${
LABEL_SUFFIX
}
"
)
if
(
IPHONE
)
set_target_properties
(
yaml-cpp PROPERTIES
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET
"3.0"
)
endif
()
if
(
MSVC
)
if
(
NOT BUILD_SHARED_LIBS
)
# correct library names
set_target_properties
(
yaml-cpp PROPERTIES
DEBUG_POSTFIX
"
${
LIB_TARGET_SUFFIX
}
d"
RELEASE_POSTFIX
"
${
LIB_TARGET_SUFFIX
}
"
MINSIZEREL_POSTFIX
"
${
LIB_TARGET_SUFFIX
}
"
RELWITHDEBINFO_POSTFIX
"
${
LIB_TARGET_SUFFIX
}
"
)
endif
()
endif
()
install
(
TARGETS yaml-cpp
${
_INSTALL_DESTINATIONS
}
)
install
(
FILES
${
public_headers
}
DESTINATION
${
INCLUDE_INSTALL_DIR
}
)
if
(
UNIX
)
set
(
PC_FILE
${
CMAKE_BINARY_DIR
}
/yaml-cpp.pc
)
configure_file
(
"yaml-cpp.pc.cmake"
${
PC_FILE
}
@ONLY
)
install
(
FILES
${
PC_FILE
}
DESTINATION
${
LIB_INSTALL_DIR
}
/pkgconfig
)
endif
()
###
### Extras
###
if
(
YAML_CPP_BUILD_TOOLS
)
add_subdirectory
(
test
)
add_subdirectory
(
util
)
endif
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment