Ask Your Question
6

First compile with messages, messages not found

asked 2013-08-15 03:38:28 -0600

Hansg91 gravatar image

Hello,

I am using a catkin workspace with a package that only contains messages. If I build the workspace for the first time (ie. delete the devel / build folders) it seems like it wants to compile code that depends on these messages, before it has build these messages. This results in an error saying it can't find the message include file.

If I then try to compile it again it works fine, because then the messages are probably generated. In packages that depend on the messages I add this in the CMakeLists.txt:

generate_messages(
  DEPENDENCIES
  eva_msgs  # Or other packages containing msgs
)

But that doesn't seem to have any effect. It is not a big deal since I can just compile it twice the first time, but I would like to fix it still.

Regards, Hans

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
8

answered 2013-08-15 04:36:26 -0600

This is a common issue people have with catkin. See here, here, and here.

Your assessment is correct that the executable is being built before the message headers. In catkin, you must explicitly tell cmake that your code depends on those message targets to ensure the build order gets resolved correctly. The catkin how-to suggests that the best way to resolve this is to add the following line to your CMakeLists.txt:

add_dependencies(your_program ${catkin_EXPORTED_TARGETS})

This will force your code to build after all its listed dependencies, which is safe, but maybe more conservative than required. I haven't tried it, but the solution listed here suggests that you can, instead, use the following line to explicitly state that you're depending on the message-headers only:

add_dependencies(your_program msg_pkg_generate_messages_cpp)

That last method is used in the wiki tutorial on custom messages.

edit flag offensive delete link more

Comments

Aha I see, I found it quite hard what to search for but that helped. The _generate_messages_cpp suffix didn't work for me, _gencpp as mentioned in that issue did. Perhaps my groovy is a bit outdated. I find it strange though, since in the package.xml I already mention it depends on my msgs package.

Hansg91 gravatar imageHansg91 ( 2013-08-15 04:53:38 -0600 )edit

I agree, it is confusing. In catkin, you must explicitly specify build dependencies in CMakeLists.txt independently of what's specified in the package.xml. This is done in two steps: 1) find the req'd package (find_package), 2) add the dependencies (target_link_libraries, add_dependencies, etc.)

Jeremy Zoss gravatar imageJeremy Zoss ( 2013-08-15 05:00:21 -0600 )edit

+1, works for me.

SR gravatar imageSR ( 2015-08-11 04:08:18 -0600 )edit

Thanks, the add_dependencies for _generate_messages_cpp plus your three links worked. I also forgot message_generation among CMakeLists.txt dependencies so now I use two CMake variables for dependency and message packages and I pass them to find_package, catkin_package and generate_messages.

Avio gravatar imageAvio ( 2018-06-12 07:15:32 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2013-08-15 03:38:28 -0600

Seen: 9,922 times

Last updated: Aug 15 '13