ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

Ament/Colcon: Share variable between package CMakeLists

asked 2018-12-12 07:43:44 -0600

Flautz gravatar image

updated 2018-12-12 17:48:32 -0600

jayess gravatar image

I want to share a filepath variable between the CMakeLists of two packages.

When I set in the firstCMakeLists a variable using the following ways:

set(varABC "x" CACHE STRING "Description")
set( ENV{varDEF} x )

It won't appear in the second CmakeLists the following way:

find_package(packageA REQUIRED)
message(STATUS "${varABC}")
message(STATUS "${varDEF}")

Anybody knows how to do that the right way?

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
2

answered 2018-12-12 11:58:09 -0600

Dirk Thomas gravatar image

Each package is a separate CMake project. For each a separate CMake invocation is being used. So variables set in one are not available in the other.

The ament_cmake function ament_package has an argument CONFIG_EXTRAS (see https://github.com/ament/ament_cmake/... ). You can provide you own CMake file which will be included when other packages find your package with find_package().

You will find examples how to use the argument in various packages (e.g. in rclcpp).

edit flag offensive delete link more

Comments

Thanks, that seems to be the right thing!

Flautz gravatar image Flautz  ( 2018-12-12 14:34:08 -0600 )edit

Please mark the answer as correct (using the checkmark below the voting) if it answers the question. It just helps others to find answered questions in the future. Thanks.

Dirk Thomas gravatar image Dirk Thomas  ( 2018-12-12 15:22:35 -0600 )edit
0

answered 2019-06-27 10:57:55 -0600

bergercookie gravatar image

updated 2019-06-27 10:58:36 -0600

In my case I wanted to reuse a unittests-related file of package A in another package B. I resided to the following setup:

  1. packageA/CMakeLists.txt: ament_package(CONFIG_EXTRAS cmake/extra.cmake.in)

  2. packageA/cmake/extra.cmake: get_filename_component(@PROJECT_NAME@_TEST_DIR @PROJECT_SOURCE_DIR@/test ABSOLUTE)

  3. packageB/CMakeLists.txt: find_package(packageA), include_directories(${packageA_TEST_DIR})

  4. Then just use the file that's under the test dir in your cpp/hpp files of package B: #include "filename-relative to *_TEST_DIR"
edit flag offensive delete link more

Question Tools

Stats

Asked: 2018-12-12 07:43:44 -0600

Seen: 596 times

Last updated: Jun 27 '19