From 185b44a8d9e0439472d5120ebb284fee63a33828 Mon Sep 17 00:00:00 2001 From: Levi Armstrong Date: Wed, 29 Jan 2020 22:46:09 -0600 Subject: [PATCH] Example of single package containing both ros1 and ros2 code --- src/bar_ros/CMakeLists.txt | 13 ++ src/bar_ros/package.xml | 24 ++ src/bar_ros/ros1/ros.cmake | 29 +++ .../ros1}/src/bar_node.cpp | 0 src/bar_ros/ros2/ros.cmake | 39 ++++ .../ros2}/src/bar_node.cpp | 0 src/bar_ros1/CMakeLists.txt | 205 ------------------ src/bar_ros1/package.xml | 60 ----- src/bar_ros2/CMakeLists.txt | 47 ---- src/bar_ros2/package.xml | 21 -- src/lib_foo/package.xml | 2 - 11 files changed, 105 insertions(+), 335 deletions(-) create mode 100644 src/bar_ros/CMakeLists.txt create mode 100644 src/bar_ros/package.xml create mode 100644 src/bar_ros/ros1/ros.cmake rename src/{bar_ros1 => bar_ros/ros1}/src/bar_node.cpp (100%) create mode 100644 src/bar_ros/ros2/ros.cmake rename src/{bar_ros2 => bar_ros/ros2}/src/bar_node.cpp (100%) delete mode 100644 src/bar_ros1/CMakeLists.txt delete mode 100644 src/bar_ros1/package.xml delete mode 100644 src/bar_ros2/CMakeLists.txt delete mode 100644 src/bar_ros2/package.xml diff --git a/src/bar_ros/CMakeLists.txt b/src/bar_ros/CMakeLists.txt new file mode 100644 index 0000000..4da5033 --- /dev/null +++ b/src/bar_ros/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.5.0) +project(bar_ros) + +find_package(catkin QUIET) +find_package(ament_cmake QUIET) + +if (catkin_FOUND) + include(ros1/ros.cmake) +elseif(ament_cmake_FOUND) + include(ros2/ros.cmake) +else() + message(FATAL_ERROR "ROS build tool not found.") +endif() diff --git a/src/bar_ros/package.xml b/src/bar_ros/package.xml new file mode 100644 index 0000000..bebd58f --- /dev/null +++ b/src/bar_ros/package.xml @@ -0,0 +1,24 @@ + + + bar_ros + 0.0.1 + The bar package + + rre + BSD + + catkin + roscpp + + ament_cmake + rclcpp + ament_lint_auto + ament_lint_common + + lib_foo + + + catkin + ament_cmake + + diff --git a/src/bar_ros/ros1/ros.cmake b/src/bar_ros/ros1/ros.cmake new file mode 100644 index 0000000..e28e46d --- /dev/null +++ b/src/bar_ros/ros1/ros.cmake @@ -0,0 +1,29 @@ +find_package(catkin REQUIRED COMPONENTS + roscpp +) + +find_package(lib_foo REQUIRED) + +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES bar_ros1 +# CATKIN_DEPENDS lib_foo roscpp +# DEPENDS system_lib +) + +include_directories( +# include + ${catkin_INCLUDE_DIRS} + ${lib_foo_INCLUDE_DIRS} +) + +add_executable(${PROJECT_NAME}_node ros1/src/bar_node.cpp) +target_link_libraries(${PROJECT_NAME}_node + ${catkin_LIBRARIES} + ${lib_foo_LIBRARIES} +) +install(TARGETS ${PROJECT_NAME}_node + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) diff --git a/src/bar_ros1/src/bar_node.cpp b/src/bar_ros/ros1/src/bar_node.cpp similarity index 100% rename from src/bar_ros1/src/bar_node.cpp rename to src/bar_ros/ros1/src/bar_node.cpp diff --git a/src/bar_ros/ros2/ros.cmake b/src/bar_ros/ros2/ros.cmake new file mode 100644 index 0000000..74ab6fa --- /dev/null +++ b/src/bar_ros/ros2/ros.cmake @@ -0,0 +1,39 @@ +# Default to C99 +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) +endif() + +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(lib_foo REQUIRED) + +include_directories(include ${lib_foo_INCLUDE_DIRS}) + +add_executable(${PROJECT_NAME}_node ros2/src/bar_node.cpp) +ament_target_dependencies(${PROJECT_NAME}_node rclcpp) +target_link_libraries(${PROJECT_NAME}_node ${lib_foo_LIBRARIES}) + +install(TARGETS ${PROJECT_NAME}_node DESTINATION lib/${PROJECT_NAME}) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + # the following line skips the linter which checks for copyrights + # uncomment the line when a copyright and license is not present in all source files + #set(ament_cmake_copyright_FOUND TRUE) + # the following line skips cpplint (only works in a git repo) + # uncomment the line when this package is not in a git repo + #set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() + +ament_package() diff --git a/src/bar_ros2/src/bar_node.cpp b/src/bar_ros/ros2/src/bar_node.cpp similarity index 100% rename from src/bar_ros2/src/bar_node.cpp rename to src/bar_ros/ros2/src/bar_node.cpp diff --git a/src/bar_ros1/CMakeLists.txt b/src/bar_ros1/CMakeLists.txt deleted file mode 100644 index ef32c60..0000000 --- a/src/bar_ros1/CMakeLists.txt +++ /dev/null @@ -1,205 +0,0 @@ -cmake_minimum_required(VERSION 2.8.3) -project(bar_ros1) - -## Compile as C++11, supported in ROS Kinetic and newer -# add_compile_options(-std=c++11) - -## Find catkin macros and libraries -## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) -## is used, also find other catkin packages -find_package(catkin QUIET COMPONENTS - roscpp -) - -if (catkin_FOUND) - - ## System dependencies are found with CMake's conventions - # find_package(Boost REQUIRED COMPONENTS system) - - find_package(lib_foo REQUIRED) - - ## Uncomment this if the package has a setup.py. This macro ensures - ## modules and global scripts declared therein get installed - ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html - # catkin_python_setup() - - ################################################ - ## Declare ROS messages, services and actions ## - ################################################ - - ## To declare and build messages, services or actions from within this - ## package, follow these steps: - ## * Let MSG_DEP_SET be the set of packages whose message types you use in - ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). - ## * In the file package.xml: - ## * add a build_depend tag for "message_generation" - ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET - ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in - ## but can be declared for certainty nonetheless: - ## * add a exec_depend tag for "message_runtime" - ## * In this file (CMakeLists.txt): - ## * add "message_generation" and every package in MSG_DEP_SET to - ## find_package(catkin REQUIRED COMPONENTS ...) - ## * add "message_runtime" and every package in MSG_DEP_SET to - ## catkin_package(CATKIN_DEPENDS ...) - ## * uncomment the add_*_files sections below as needed - ## and list every .msg/.srv/.action file to be processed - ## * uncomment the generate_messages entry below - ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) - - ## Generate messages in the 'msg' folder - # add_message_files( - # FILES - # Message1.msg - # Message2.msg - # ) - - ## Generate services in the 'srv' folder - # add_service_files( - # FILES - # Service1.srv - # Service2.srv - # ) - - ## Generate actions in the 'action' folder - # add_action_files( - # FILES - # Action1.action - # Action2.action - # ) - - ## Generate added messages and services with any dependencies listed here - # generate_messages( - # DEPENDENCIES - # std_msgs # Or other packages containing msgs - # ) - - ################################################ - ## Declare ROS dynamic reconfigure parameters ## - ################################################ - - ## To declare and build dynamic reconfigure parameters within this - ## package, follow these steps: - ## * In the file package.xml: - ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" - ## * In this file (CMakeLists.txt): - ## * add "dynamic_reconfigure" to - ## find_package(catkin REQUIRED COMPONENTS ...) - ## * uncomment the "generate_dynamic_reconfigure_options" section below - ## and list every .cfg file to be processed - - ## Generate dynamic reconfigure parameters in the 'cfg' folder - # generate_dynamic_reconfigure_options( - # cfg/DynReconf1.cfg - # cfg/DynReconf2.cfg - # ) - - ################################### - ## catkin specific configuration ## - ################################### - ## The catkin_package macro generates cmake config files for your package - ## Declare things to be passed to dependent projects - ## INCLUDE_DIRS: uncomment this if your package contains header files - ## LIBRARIES: libraries you create in this project that dependent projects also need - ## CATKIN_DEPENDS: catkin_packages dependent projects also need - ## DEPENDS: system dependencies of this project that dependent projects also need - catkin_package( - # INCLUDE_DIRS include - # LIBRARIES bar_ros1 - # CATKIN_DEPENDS lib_foo roscpp - # DEPENDS system_lib - ) - - ########### - ## Build ## - ########### - - ## Specify additional locations of header files - ## Your package locations should be listed before other locations - include_directories( - # include - ${catkin_INCLUDE_DIRS} - ${lib_foo_INCLUDE_DIRS} - ) - - ## Declare a C++ library - # add_library(${PROJECT_NAME} - # src/${PROJECT_NAME}/bar.cpp - # ) - - ## Add cmake target dependencies of the library - ## as an example, code may need to be generated before libraries - ## either from message generation or dynamic reconfigure - # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - - ## Declare a C++ executable - ## With catkin_make all packages are built within a single CMake context - ## The recommended prefix ensures that target names across packages don't collide - add_executable(${PROJECT_NAME}_node src/bar_node.cpp) - - ## Rename C++ executable without prefix - ## The above recommended prefix causes long target names, the following renames the - ## target back to the shorter version for ease of user use - ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" - # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") - - ## Add cmake target dependencies of the executable - ## same as for the library above - # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - - ## Specify libraries to link a library or executable target against - target_link_libraries(${PROJECT_NAME}_node - ${catkin_LIBRARIES} - ${lib_foo_LIBRARIES} - ) - - ############# - ## Install ## - ############# - - # all install targets should use catkin DESTINATION variables - # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html - - ## Mark executable scripts (Python etc.) for installation - ## in contrast to setup.py, you can choose the destination - # install(PROGRAMS - # scripts/my_python_script - # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - # ) - - ## Mark executables and/or libraries for installation - # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node - # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} - # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} - # ) - - ## Mark cpp header files for installation - # install(DIRECTORY include/${PROJECT_NAME}/ - # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} - # FILES_MATCHING PATTERN "*.h" - # PATTERN ".svn" EXCLUDE - # ) - - ## Mark other files for installation (e.g. launch and bag files, etc.) - # install(FILES - # # myfile1 - # # myfile2 - # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} - # ) - - ############# - ## Testing ## - ############# - - ## Add gtest based cpp test target and link libraries - # catkin_add_gtest(${PROJECT_NAME}-test test/test_bar.cpp) - # if(TARGET ${PROJECT_NAME}-test) - # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) - # endif() - - ## Add folders to be run by python nosetests - # catkin_add_nosetests(test) -else() - message("catkin not found so skipping this package") -endif() \ No newline at end of file diff --git a/src/bar_ros1/package.xml b/src/bar_ros1/package.xml deleted file mode 100644 index 61c103c..0000000 --- a/src/bar_ros1/package.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - bar_ros1 - 0.0.1 - The bar package - - - - - rre - - - - - - BSD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - catkin - lib_foo - roscpp - - - - - - - diff --git a/src/bar_ros2/CMakeLists.txt b/src/bar_ros2/CMakeLists.txt deleted file mode 100644 index 7f07081..0000000 --- a/src/bar_ros2/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(bar_ros2) - -# Default to C99 -if(NOT CMAKE_C_STANDARD) - set(CMAKE_C_STANDARD 99) -endif() - -# Default to C++14 -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 14) -endif() - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake QUIET) - -if(ament_cmake_FOUND) - find_package(rclcpp REQUIRED) - find_package(lib_foo REQUIRED) - - include_directories(include ${lib_foo_INCLUDE_DIRS}) - - add_executable(${PROJECT_NAME}_node src/bar_node.cpp) - ament_target_dependencies(${PROJECT_NAME}_node rclcpp) - target_link_libraries(${PROJECT_NAME}_node ${lib_foo_LIBRARIES}) - - install(TARGETS ${PROJECT_NAME}_node DESTINATION lib/${PROJECT_NAME}) - - if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() - endif() - - ament_package() -else() - message("ament_cmake not found so skipping this package") -endif() \ No newline at end of file diff --git a/src/bar_ros2/package.xml b/src/bar_ros2/package.xml deleted file mode 100644 index 1f244b7..0000000 --- a/src/bar_ros2/package.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - bar_ros2 - 0.0.0 - TODO: Package description - rre - TODO: License declaration - - ament_cmake - - rclcpp - lib_foo - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/lib_foo/package.xml b/src/lib_foo/package.xml index 131cfea..479057a 100644 --- a/src/lib_foo/package.xml +++ b/src/lib_foo/package.xml @@ -5,8 +5,6 @@ A dummy lib to make pure CMake lib to work woth ROS 1 and ROS 2 rre BSD - catkin - ament_cmake cmake