-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathCMakeLists.txt
143 lines (114 loc) · 3.95 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
cmake_minimum_required(VERSION 3.5.0)
project(rmf_task_sequence VERSION 2.1.3)
set(CMAKE_EXPORT_COMPILE_COMMANDS on)
# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
if(NOT CMAKE_BUILD_TYPE)
# Use the Release build type by default if the user has not specified one
set(CMAKE_BUILD_TYPE Release)
endif()
include(GNUInstallDirs)
find_package(rmf_api_msgs REQUIRED)
find_package(rmf_task REQUIRED)
find_package(nlohmann_json REQUIRED)
find_package(nlohmann_json_schema_validator_vendor REQUIRED)
find_package(nlohmann_json_schema_validator REQUIRED)
find_package(ament_cmake_catch2 QUIET)
find_package(ament_cmake_uncrustify QUIET)
# ===== RMF Task Sequence Library
file(GLOB_RECURSE lib_srcs
"src/rmf_task_sequence/*.cpp"
)
add_library(rmf_task_sequence SHARED
${lib_srcs}
)
target_link_libraries(rmf_task_sequence
PUBLIC
rmf_task::rmf_task
nlohmann_json::nlohmann_json
nlohmann_json_schema_validator
)
target_include_directories(rmf_task_sequence
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/rmf_api_generate_schema_headers/include> # for auto-generated schema headers
)
if(BUILD_TESTING AND ament_cmake_catch2_FOUND AND ament_cmake_uncrustify_FOUND)
file(GLOB_RECURSE unit_test_srcs "test/*.cpp")
ament_add_catch2(
test_rmf_task_sequence test/main.cpp ${unit_test_srcs}
TIMEOUT 300)
target_link_libraries(test_rmf_task_sequence
rmf_task_sequence
)
target_include_directories(test_rmf_task_sequence
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/>
)
find_file(uncrustify_config_file
NAMES "rmf_code_style.cfg"
PATHS "${rmf_utils_DIR}/../../../share/rmf_utils/")
ament_uncrustify(
ARGN include src test
CONFIG_FILE ${uncrustify_config_file}
MAX_LINE_LENGTH 80
)
endif()
# Generate the schema headers
rmf_api_generate_schema_headers(
PACKAGE rmf_task_sequence
SCHEMAS_DIR ${CMAKE_CURRENT_LIST_DIR}/schemas
)
# Create cmake config files
include(CMakePackageConfigHelpers)
set(INSTALL_CONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/rmf_task_sequence/cmake")
set(PACKAGE_CONFIG_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/rmf_task_sequence-config-version.cmake")
set(PACKAGE_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/rmf_task_sequence-config.cmake")
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/cmake/rmf_task_sequence-config.cmake.in"
${PACKAGE_CONFIG_FILE}
INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}
)
write_basic_package_version_file(
${PACKAGE_CONFIG_VERSION_FILE}
COMPATIBILITY ExactVersion
)
install(
TARGETS rmf_task_sequence
EXPORT rmf_task_sequence-targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
install(
DIRECTORY include/rmf_task_sequence
DESTINATION include
)
install(
FILES
${PACKAGE_CONFIG_VERSION_FILE}
${PACKAGE_CONFIG_FILE}
DESTINATION ${INSTALL_CONFIG_DIR}
)
install(
EXPORT rmf_task_sequence-targets
FILE rmf_task_sequence-targets.cmake
NAMESPACE rmf_task_sequence::
DESTINATION ${INSTALL_CONFIG_DIR}
)
export(
EXPORT rmf_task_sequence-targets
FILE ${CMAKE_CURRENT_BINARY_DIR}/rmf_task_sequence-targets.cmake
NAMESPACE rmf_task_sequence::
)
# Export ament index path
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME} "")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME} DESTINATION share/ament_index/resource_index/packages)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/ament_prefix_path.dsv "prepend-non-duplicate;AMENT_PREFIX_PATH;")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/ament_prefix_path.dsv DESTINATION share/${PROJECT_NAME}/hook)