-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
153 lines (127 loc) · 4.74 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
################################################################################
# project
project(TaskSpace VERSION 1.0.0)
# modules
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
# ctest
include(CTest)
option(BUILD_DOCUMENTATION
"Create and install the HTML based API documentation (requires Doxygen)" OFF)
# for rdm (emacs)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# for grouping into folders
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
# c++11, -g option is used to export debug symbols for gdb
if(${CMAKE_CXX_COMPILER_ID} MATCHES GNU OR
${CMAKE_CXX_COMPILER_ID} MATCHES Clang)
# Using C++11 on OSX requires using libc++ instead of libstd++.
# libc++ is an implementation of the C++ standard library for OSX.
if(APPLE)
if(XCODE)
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
endif()
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g")
endif()
endif()
# report platform
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
set(PLATFORM_ABI x64)
else()
set(PLATFORM_ABI x86)
endif()
set(BUILD_PLATFORM "${CMAKE_HOST_SYSTEM_NAME}:${PLATFORM_ABI}" CACHE STRING
"This is the platform and ABI we're building for." FORCE)
# install layout
# Layout. This works for all platforms:
# * <prefix>/lib/cmake/<PROJECT-NAME>
# * <prefix>/lib/
# * <prefix>/include/
# * <prefix>/bin/
# * <prefix>/doc/
# * <prefix>/scripts/
set(CMAKE_INSTALL_BINDIR bin)
set(CMAKE_INSTALL_INCLUDEDIR include)
set(CMAKE_INSTALL_LIBDIR lib)
set(CMAKE_INSTALL_DOCDIR ${CMAKE_INSTALL_PREFIX}/docs)
set(CMAKE_INSTALL_CONFIG ${CMAKE_INSTALL_PREFIX}/lib/cmake/${PROJECT_NAME})
set(CMAKE_INSTALL_SCRIPTS ${CMAKE_INSTALL_PREFIX}/scripts)
# define library postfix so that different builds will produce
# distinguished libraries
set(CMAKE_RELEASE_POSTFIX "_r" CACHE string "Release postfix")
set(CMAKE_DEBUG_POSTFIX "_d" CACHE string "Debug postfix")
set(CMAKE_RELWITHDEBINFO_POSTFIX "_rd" CACHE string
"Release with debug info postfix")
set(CMAKE_MINSIZEREL_POSTFIX "_mr" CACHE string
"Minimum size release postfix")
mark_as_advanced(CMAKE_RELEASE_POSTFIX)
mark_as_advanced(CMAKE_DEBUG_POSTFIX)
mark_as_advanced(CMAKE_RELWITHDEBINFO_POSTFIX)
mark_as_advanced(CMAKE_MINSIZEREL_POSTFIX)
# build executables and libraries in the same place
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} CACHE INTERNAL "")
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} CACHE INTERNAL "")
# configure project global settings that are include in the source
set(DATA_DIR "${PROJECT_SOURCE_DIR}/data")
configure_file(
"${PROJECT_SOURCE_DIR}/src/include/Settings.h.in"
"${PROJECT_SOURCE_DIR}/src/include/Settings.h")
set(CMAKE_EXTRA_INCLUDE_FILES)
################################################################################
# configure OpenSim
find_package(OpenSim REQUIRED)
if(OpenSim_FOUND)
message(STATUS "OpenSim found at ${OpenSim_DIR}")
include_directories(${OpenSim_INCLUDE_DIRS})
link_directories(${OpenSim_LIB_DIR})
else()
message(FATAL_ERROR "Can't find OpenSim at ${OpenSim_DIR}")
endif()
################################################################################
# submodules
add_subdirectory(src)
add_subdirectory(doc)
################################################################################
# installation (https://github.com/forexample/package-example)
# include module with function 'write_basic_package_version_file'
include(CMakePackageConfigHelpers)
# configuration
set(TARGET_EXPORT_NAME "${PROJECT_NAME}-targets" CACHE
INTERNAL "Internal variable that is referenced by library generation")
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake")
# Configure '<PROJECT-NAME>ConfigVersion.cmake'
# Note: PROJECT_VERSION is used as a VERSION
write_basic_package_version_file(
"${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion
)
# Configure '<PROJECT-NAME>Config.cmake'
configure_package_config_file(
"cmake/Config.cmake.in"
"${PROJECT_CONFIG}"
INSTALL_DESTINATION "${CMAKE_INSTALL_CONFIG}"
)
# intall configuration
# * <prefix>/lib/cmake/Foo/FooConfig.cmake
# * <prefix>/lib/cmake/Foo/FooConfigVersion.cmake
install(
FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
DESTINATION "${CMAKE_INSTALL_CONFIG}"
)
# install target configuration
# * <prefix>/lib/cmake/Foo/FooTargets.cmake
install(
EXPORT ${TARGET_EXPORT_NAME}
DESTINATION "${CMAKE_INSTALL_CONFIG}"
)
# scripts directory
install(
DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/scripts/
DESTINATION "${CMAKE_INSTALL_SCRIPTS}"
)
# others dirs can be copied to the install dir