1- cmake_minimum_required (VERSION 2.8)
2- project (behavior_tree_core)
1+ cmake_minimum_required (VERSION 2.8.12) # version on Ubuntu Trusty
2+ project (behaviortree_cpp)
3+
4+ if (NOT CMAKE_VERSION VERSION_LESS 3.1)
5+ set (CMAKE_CXX_STANDARD 11)
6+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
7+ else ()
8+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
9+ endif ()
10+
11+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
312
4- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -Werror=return-type -Wall -Wpedantic -Wattributes" )
5- set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR} /cmake" )
13+
14+ set (CMAKE_CONFIG_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR} /cmake" )
15+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CONFIG_PATH} " )
616
717option (BUILD_EXAMPLES "Build tutorials and examples" ON )
818option (BUILD_UNIT_TESTS "Build the unit tests" ON )
919
1020#############################################################
11- # http://answers.ros.org/question/230877/optionally-build-a-package-with-catkin/
12- #
13- # This variable MUST NOT be set manually by the user, it will be detected
14- # automatically if you compile using catkin
21+ # Find packages
22+ find_package (Threads REQUIRED)
23+ find_package (ZMQ)
24+ find_package (GTest)
25+
26+ list (APPEND BEHAVIOR_TREE_EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS} )
27+
28+ if ( ZMQ_FOUND )
29+ message (STATUS "ZeroMQ found." )
30+ add_definitions ( -DZMQ_FOUND )
31+ list (APPEND BT_SOURCE src/loggers/bt_zmq_publisher.cpp)
32+ list (APPEND BEHAVIOR_TREE_EXTERNAL_LIBRARIES zmq)
33+ else ()
34+ message (WARNING "ZeroMQ NOT found. Skipping the build of [PublisherZMQ] and [bt_recorder]." )
35+ endif ()
36+
37+ if (NOT GTEST_FOUND)
38+ message (WARNING " GTest not found!" )
39+ endif (NOT GTEST_FOUND)
40+
41+
1542if ( CATKIN_DEVEL_PREFIX OR CATKIN_BUILD_BINARY_PACKAGE)
1643 set (catkin_FOUND 1)
1744 add_definitions ( -DUSING_ROS )
@@ -26,119 +53,131 @@ if(catkin_FOUND)
2653
2754 catkin_package(
2855 INCLUDE_DIRS include # do not include "3rdparty" here
29- LIBRARIES behavior_tree_core
56+ LIBRARIES ${PROJECT_NAME}
3057 )
3158
32- else (catkin_FOUND )
59+ else ()
3360
3461 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
3562 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
3663 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /bin)
3764
38- find_package (GTest)
39- include_directories (${GTEST_INCLUDE_DIRS} )
40- if (NOT GTEST_FOUND)
41- message (WARNING " GTest not found!" )
42- endif (NOT GTEST_FOUND)
43-
44- endif (catkin_FOUND)
45-
46-
47- set (BT_Source
48- src/action_node.cpp
49- src/basic_types.cpp
50- src/decorator_node.cpp
51- src/condition_node.cpp
52- src/control_node.cpp
53- src/exceptions.cpp
54- src/leaf_node.cpp
55- src/tick_engine.cpp
56- src/tree_node.cpp
57- src/bt_factory.cpp
58- src/behavior_tree.cpp
59- src/xml_parsing.cpp
60- src/shared_library.cpp
61- src/shared_library_UNIX.cpp
62-
63- src/decorators/inverter_node.cpp
64- src/decorators/repeat_node.cpp
65- src/decorators/retry_node.cpp
66- src/decorators/timeout_node.cpp
67-
68- src/controls/parallel_node.cpp
69- src/controls/sequence_node.cpp
70- src/controls/sequence_star_node.cpp
71- src/controls/fallback_node.cpp
72- src/controls/fallback_star_node.cpp
73-
74- src/loggers/bt_cout_logger.cpp
75- src/loggers/bt_file_logger.cpp
76- src/loggers/bt_minitrace_logger.cpp
77-
78- 3rdparty/tinyXML2/tinyxml2.cpp
79- 3rdparty/minitrace/minitrace.cpp
80- )
81- include_directories (include 3rdparty/)
82-
83- set (BEHAVIOR_TREE_LIBRARIES behavior_tree_core)
65+ endif ()
8466
85- find_package (ZMQ)
67+ #############################################################
68+ # LIBRARY
8669
87- if ( ZMQ_FOUND )
88- message (STATUS "ZeroMQ found." )
89- add_definitions ( -DZMQ_FOUND )
90- set (BT_Source ${BT_Source} src/loggers/bt_zmq_publisher.cpp )
70+ list (APPEND BT_SOURCE
71+ src/action_node.cpp
72+ src/basic_types.cpp
73+ src/decorator_node.cpp
74+ src/condition_node.cpp
75+ src/control_node.cpp
76+ src/exceptions.cpp
77+ src/leaf_node.cpp
78+ src/tick_engine.cpp
79+ src/tree_node.cpp
80+ src/bt_factory.cpp
81+ src/behavior_tree.cpp
82+ src/xml_parsing.cpp
83+ src/shared_library.cpp
84+ src/shared_library_UNIX.cpp
85+
86+ src/decorators/inverter_node.cpp
87+ src/decorators/repeat_node.cpp
88+ src/decorators/retry_node.cpp
89+ src/decorators/timeout_node.cpp
90+
91+ src/controls/parallel_node.cpp
92+ src/controls/sequence_node.cpp
93+ src/controls/sequence_star_node.cpp
94+ src/controls/fallback_node.cpp
95+ src/controls/fallback_star_node.cpp
96+
97+ src/loggers/bt_cout_logger.cpp
98+ src/loggers/bt_file_logger.cpp
99+ src/loggers/bt_minitrace_logger.cpp
100+
101+ 3rdparty/tinyXML2/tinyxml2.cpp
102+ 3rdparty/minitrace/minitrace.cpp
103+ )
104+
105+ set (BEHAVIOR_TREE_LIBRARY ${PROJECT_NAME} )
91106
92- set (BEHAVIOR_TREE_LIBRARIES ${BEHAVIOR_TREE_LIBRARIES} zmq)
107+ add_library (${BEHAVIOR_TREE_LIBRARY} ${BT_SOURCE} )
108+ target_link_libraries (${BEHAVIOR_TREE_LIBRARY} ${BEHAVIOR_TREE_EXTERNAL_LIBRARIES} ${catkin_LIBRARIES} )
109+ target_include_directories (${BEHAVIOR_TREE_LIBRARY} PUBLIC include 3rdparty ${catkin_INCLUDE_DIRS} )
110+
111+ if (MSVC )
112+ target_compile_options (${BEHAVIOR_TREE_LIBRARY} PRIVATE /W4 /WX)
93113else ()
94- message (WARNING "ZeroMQ NOT found. Skipping the build of [PublisherZMQ] and [bt_recorder]." )
114+ target_compile_options ( ${BEHAVIOR_TREE_LIBRARY} PRIVATE -Wall -Wextra -Werror=return- type )
95115endif ()
96116
97117######################################################
98- # LIBRARY
118+ # TESTS
119+
120+ list (APPEND BT_TESTS
121+ gtest/src/action_test_node.cpp
122+ gtest/src/condition_test_node.cpp
123+ gtest/gtest_tree.cpp
124+ gtest/gtest_sequence.cpp
125+ gtest/gtest_parallel.cpp
126+ gtest/gtest_fallback.cpp
127+ gtest/gtest_factory.cpp
128+ gtest/gtest_decorator.cpp
129+ )
130+
131+ if (catkin_FOUND AND CATKIN_ENABLE_TESTING)
132+
133+ catkin_add_gtest(${BEHAVIOR_TREE_LIBRARY} _test ${BT_TESTS} )
134+ target_link_libraries (${BEHAVIOR_TREE_LIBRARY} _test ${BEHAVIOR_TREE_LIBRARY}
135+ crossdoor_nodes
136+ ${catkin_LIBRARIES} )
137+ target_include_directories (${BEHAVIOR_TREE_LIBRARY} _test PRIVATE gtest/include )
138+
139+ elseif (GTEST_FOUND AND BUILD_UNIT_TESTS)
140+
141+ enable_testing ()
142+
143+ add_executable (${BEHAVIOR_TREE_LIBRARY} _test ${BT_TESTS} )
144+ target_link_libraries (${PROJECT_NAME} _test ${BEHAVIOR_TREE_LIBRARY}
145+ crossdoor_nodes
146+ ${GTEST_LIBRARIES}
147+ ${GTEST_MAIN_LIBRARIES} )
148+ target_include_directories (${BEHAVIOR_TREE_LIBRARY} _test PRIVATE gtest/include ${GTEST_INCLUDE_DIRS} )
149+
150+ add_test (BehaviorTreeCoreTest ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${BEHAVIOR_TREE_LIBRARY} _test)
151+ endif ()
152+
99153######################################################
100- add_library (behavior_tree_core STATIC ${BT_Source} )
101- target_compile_options (behavior_tree_core PRIVATE "-fPIC" )
102- target_link_libraries (behavior_tree_core dl)
154+ # INSTALL
155+ if (catkin_FOUND)
156+ set ( BEHAVIOR_TREE_LIB_DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} )
157+ set ( BEHAVIOR_TREE_INC_DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} )
158+ set ( BEHAVIOR_TREE_BIN_DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
159+ else ()
160+ set ( BEHAVIOR_TREE_LIB_DESTINATION lib )
161+ set ( BEHAVIOR_TREE_INC_DESTINATION include )
162+ set ( BEHAVIOR_TREE_BIN_DESTINATION bin )
163+ endif ()
164+
165+ INSTALL (TARGETS ${BEHAVIOR_TREE_LIBRARY}
166+ ARCHIVE DESTINATION ${BEHAVIOR_TREE_LIB_DESTINATION}
167+ LIBRARY DESTINATION ${BEHAVIOR_TREE_LIB_DESTINATION}
168+ )
169+
170+ INSTALL ( DIRECTORY ${CMAKE_SOURCE_DIR} /include /
171+ DESTINATION ${BEHAVIOR_TREE_INC_DESTINATION}
172+ FILES_MATCHING PATTERN "*.h*" )
103173
104174######################################################
105175# EXAMPLES and TOOLS
106- ######################################################
176+
107177if ( BUILD_EXAMPLES )
108178 add_subdirectory (tools)
109179 add_subdirectory (sample_nodes)
110180 add_subdirectory (examples)
111181endif ()
112- ######################################################
113- # TESTS
114- ######################################################
115- set (BT_Tests
116- gtest/src/action_test_node.cpp
117- gtest/src/condition_test_node.cpp
118- gtest/gtest_tree.cpp
119- gtest/gtest_sequence.cpp
120- gtest/gtest_parallel.cpp
121- gtest/gtest_fallback.cpp
122- gtest/gtest_factory.cpp
123- gtest/gtest_decorator.cpp
124- )
125-
126- if (catkin_FOUND AND CATKIN_ENABLE_TESTING)
127- include_directories (gtest/include )
128182
129- catkin_add_gtest(behavior_tree_core_test ${BT_Tests} )
130- target_link_libraries (behavior_tree_core_test
131- ${BEHAVIOR_TREE_LIBRARIES} crossdoor_nodes
132- ${catkin_LIBRARIES} )
133183
134- elseif (GTEST_FOUND AND BUILD_UNIT_TESTS)
135- include_directories (gtest/include )
136-
137- add_executable (behavior_tree_core_test ${BT_Tests} )
138- target_link_libraries (behavior_tree_core_test
139- ${BEHAVIOR_TREE_LIBRARIES} crossdoor_nodes
140- ${GTEST_LIBRARIES}
141- ${GTEST_MAIN_LIBRARIES}
142- )
143-
144- endif ()
0 commit comments