@@ -28,7 +28,8 @@ add_library(${library_name} SHARED
28
28
target_include_directories (${library_name}
29
29
PUBLIC
30
30
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include>"
31
- "$<INSTALL_INTERFACE:include/${PROJECT_NAME} >" )
31
+ "$<INSTALL_INTERFACE:include/${PROJECT_NAME} >"
32
+ )
32
33
target_link_libraries (${library_name} PUBLIC
33
34
${action_msgs_TARGETS}
34
35
behaviortree_cpp::behaviortree_cpp
@@ -244,16 +245,29 @@ install(TARGETS ${library_name} ${plugin_libs}
244
245
245
246
# we will embed the list of plugin names inside a header file
246
247
set (GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR} /gen)
248
+ set (TREENODES_FILE nav2_tree_nodes.xml)
247
249
configure_file (plugins_list.hpp.in ${GENERATED_DIR} /plugins_list.hpp)
248
250
251
+ # create a text file listing plugin names, one per line
252
+ string (REPLACE ";" "\n " plugin_libs_one_per_line "${plugin_libs} " )
253
+ configure_file (plugins_list.txt.in ${GENERATED_DIR} /plugins_list.txt)
254
+
249
255
add_executable (generate_nav2_tree_nodes_xml src/generate_nav2_tree_nodes_xml.cpp)
250
256
target_link_libraries (generate_nav2_tree_nodes_xml PRIVATE
251
257
behaviortree_cpp::behaviortree_cpp
252
258
nav2_util::nav2_util_core
253
259
)
254
260
# allow generate_nav2_tree_nodes_xml to find plugins_list.hpp
255
261
target_include_directories (generate_nav2_tree_nodes_xml PRIVATE ${GENERATED_DIR} )
256
- install (TARGETS generate_nav2_tree_nodes_xml DESTINATION lib/${PROJECT_NAME} )
262
+
263
+ add_executable (generate_tree_nodes_xml_cli src/generate_tree_nodes_xml_cli.cpp)
264
+ target_link_libraries (generate_tree_nodes_xml_cli PRIVATE
265
+ behaviortree_cpp::behaviortree_cpp
266
+ nav2_util::nav2_util_core
267
+ )
268
+ install (TARGETS generate_nav2_tree_nodes_xml generate_tree_nodes_xml_cli
269
+ EXPORT ${library_name}
270
+ DESTINATION lib/${PROJECT_NAME} )
257
271
258
272
install (DIRECTORY include /
259
273
DESTINATION include /${PROJECT_NAME}
@@ -263,8 +277,35 @@ install(DIRECTORY test/utils/
263
277
DESTINATION include /${PROJECT_NAME} /nav2_behavior_tree/test /utils
264
278
)
265
279
266
- install (FILES nav2_tree_nodes.xml DESTINATION share/${PROJECT_NAME} )
280
+ add_custom_command (
281
+ OUTPUT ${GENERATED_DIR} /${TREENODES_FILE}
282
+ COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR} :$ENV{LD_LIBRARY_PATH}
283
+ $<TARGET_FILE:generate_tree_nodes_xml_cli>
284
+ ${GENERATED_DIR} /plugins_list.txt
285
+ ${GENERATED_DIR} /${TREENODES_FILE}
286
+ POST_BUILD
287
+ DEPENDS
288
+ ${plugin_libs}
289
+ $<TARGET_FILE:generate_tree_nodes_xml_cli>
290
+ #generate_tree_nodes_xml_cli
291
+ ${GENERATED_DIR} /plugins_list.txt
292
+ COMMENT "Generating groot tree nodes description file"
293
+ VERBATIM
294
+ )
295
+
296
+ add_custom_target (gen_tree_nodes_xml ALL
297
+ DEPENDS
298
+ generate_tree_nodes_xml_cli
299
+ ${GENERATED_DIR} /plugins_list.txt
300
+ ${GENERATED_DIR} /${TREENODES_FILE}
301
+ )
302
+
303
+ #NOTE: Still using manually managed ${TREENODES_FILE} in source directory
304
+ #install(FILES ${GENERATED_DIR}/${TREENODES_FILE} DESTINATION share/${PROJECT_NAME})
305
+ install (FILES ${TREENODES_FILE} DESTINATION share/${PROJECT_NAME} )
306
+
267
307
install (FILES ${GENERATED_DIR} /plugins_list.hpp DESTINATION include /${PROJECT_NAME} /${PROJECT_NAME} )
308
+ install (FILES ${GENERATED_DIR} /plugins_list.txt DESTINATION share/${PROJECT_NAME} )
268
309
269
310
if (BUILD_TESTING)
270
311
find_package (ament_lint_auto REQUIRED)
0 commit comments