Ask Your Question

catkin_make and catkin_tools not finding new msg/srv?

asked 2017-03-17 16:32:11 -0600

130s gravatar image

updated 2017-03-20 14:14:44 -0600

When I add a new .msg (I confirmed for .srv as well) and running catkin build, the new file doesn't seem to be processed. Is this expected, or is there a way to let it find new definition? This doesn't seem to be is also a case with catkin_make.

mkdir -p "$CWS_PROOV"/src
cd "$CWS_PROOV"/src
git clone        <-- Merely beginner_tutorials with minor change
catkin b
ll ./devel/lib/python2.7/dist-packages/beginner_tutorials/msg
source devel/setup.bash 
roscd beginner_tutorials/
echo "int64 num" > msg/Num4.msg
cd -
catkin b
ll ./devel/lib/python2.7/dist-packages/beginner_tutorials/msg
total 24K
drwxrwxr-x 2 rosnoodle rosnoodle 4.0K Mar 17 14:23 ./
drwxrwxr-x 3 rosnoodle rosnoodle 4.0K Mar 17 14:23 ../
lrwxrwxrwx 1 rosnoodle rosnoodle  111 Mar 17 14:23 -> /tmp/cws_proof/devel/.private/beginner_tutorials/lib/python2.7/dist-packages/beginner_tutorials/msg/
lrwxrwxrwx 1 rosnoodle rosnoodle  108 Mar 17 14:23 -> /tmp/cws_proof/devel/.private/beginner_tutorials/lib/python2.7/dist-packages/beginner_tutorials/msg/
lrwxrwxrwx 1 rosnoodle rosnoodle  108 Mar 17 14:23 -> /tmp/cws_proof/devel/.private/beginner_tutorials/lib/python2.7/dist-packages/beginner_tutorials/msg/
lrwxrwxrwx 1 rosnoodle rosnoodle  107 Mar 17 14:23 -> /tmp/cws_proof/devel/.private/beginner_tutorials/lib/python2.7/dist-packages/beginner_tutorials/msg/
ll /tmp/cws_proof/devel/.private/beginner_tutorials/lib/python2.7/dist-packages/beginner_tutorials/msg
    (Num4 not found)
ll ./devel/share/gennodejs/ros/beginner_tutorials/msg
    (Num4 not found)
ll ./devel/share/common-lisp/ros/beginner_tutorials/msg
    (Num4 not found)

$ apt-cache policy python-catkin-tools|grep Inst
  Installed: 0.4.4-1

To work this around I'm removing build, devel before building. After modifying CMakeLists.txt also works for me. Seen on Xenial Kinetic and Trusty Indigo.

UPDATE After listing all .msgs and .srvs in CMakeLists.txt both catkin_make and catkin build seem to find the new files and update to the existing files. It'd be still nice if there's a way to achieve the same without listing them.

edit retag flag offensive close merge delete


echo "int64 num" > msg/Num4.msg

just making sure: you did add Num4.msg to the add_message_files(..) call in CMakeLists.txt, correct?

gvdhoorn gravatar image gvdhoorn  ( 2017-03-18 05:33:13 -0600 )edit

Nope, only passing DIRECTORY (exact line in my sample). Thanks to this answer (aka yours :)) I've been able to build msgs without specifing FILES. But added files aren't the case, which is my issue.

130s gravatar image 130s  ( 2017-03-18 09:00:01 -0600 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2017-03-20 14:32:40 -0600

Dirk Thomas gravatar image

As documented by CMake ( ):

We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate.

If you glob the files instead of listing them explicitly CMake has no way of knowing when it needs to reconfigure. Therefore you should list them explicitly. Otherwise you need to force the CMake invocation.

edit flag offensive delete link more



Yeah. That's basically what I wrote in the answer to #q212420 that @130s referenced ;)

gvdhoorn gravatar image gvdhoorn  ( 2017-03-20 14:58:08 -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

1 follower


Asked: 2017-03-17 16:32:11 -0600

Seen: 391 times

Last updated: Mar 20 '17