Robotics StackExchange | Archived questions

Why catkin do not generate message headers?

I don't understand why, Catkin don't generate message headers. I have two packages. With one of them (ppldetection) catkin works properly -- all headers are generated. But for another (rosjohnny5) -- it not works. Here CMakeList.txt for the both packages:

ppl_detection

cmakeminimumrequired(VERSION 2.8.3)
project(ppl_detection)

set(CMAKEBUILDTYPE Debug)

findpackage(catkin REQUIRED COMPONENTS roscpp rospy stdmsgs messagegeneration roslaunch tf pclros lasergeometry visualizationmsgs geometry_msgs )

find_package(PCL)

addmessagefiles( FILES Human.msg Tracker.msg )

generatemessages( DEPENDENCIES stdmsgs geometrymsgs visualizationmsgs )

catkin specific configuration

catkinpackage( INCLUDEDIRS include # LIBRARIES rosssc32 CATKINDEPENDS messageruntime # DEPENDS systemlib )

Build

includedirectories( ${catkinINCLUDEDIRS} ${PCLINCLUDE_DIRS} include )

addlibrary(ppldetection src/svm.cpp src/pca.cpp src/plyfile.c )

addexecutable(kinectdetect src/kinect_detect.cpp )

targetlinklibraries(kinectdetect ppldetection ${catkinLIBRARIES} ${PCLLIBRARIES} )

adddependencies(kinectdetect ${PROJECTNAME}generatemessagescpp )

add_executable(train src/train.cpp )

targetlinklibraries(train ppldetection ${catkinLIBRARIES} ${PCL_LIBRARIES} )

adddependencies(train ${PROJECTNAME}generatemessages_cpp )

add_executable(predict src/predict.cpp )

targetlinklibraries(predict ppldetection ${catkinLIBRARIES} ${PCL_LIBRARIES} )

adddependencies(predict ${PROJECTNAME}generatemessages_cpp )

ros_johnny5

cmakeminimumrequired(VERSION 2.8.3)
project(ros_johnny5)

set(CMAKEBUILDTYPE Debug)

Find catkin macros and libraries

if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)

is used, also find other catkin packages

findpackage(catkin REQUIRED COMPONENTS roscpp rospy stdmsgs roslaunch tf ppldetection genmsg messagegeneration )

Declare ROS messages, services and actions

addmessagefiles( FILES servoMsg.msg servoMsgArray.msg robotState.msg )

Generate added messages and services with any dependencies listed here

generatemessages( DEPENDENCIES stdmsgs )

catkin specific configuration

catkinpackage( INCLUDEDIRS inc

LIBRARIES ros_ssc32

CATKIN_DEPENDS message_runtime std_msgs

DEPENDS system_lib

)

Build

includedirectories( ${catkinINCLUDEDIRS} ${BoostINCLUDE_DIRS} inc )

Declare a cpp executable

#### SSC32 NODE

set(SSC32HEADERS inc/rosssc32.h )

set(SSC32SOURCES src/rosssc32.cpp )

addexecutable(rosssc32 ${SSC32SOURCES} ${SSC32HEADERS} )

addlibrary(rosssc32_lib src/servo.cpp src/serial.cpp src/robot.cpp )

targetlinklibraries(rosssc32 ${catkinLIBRARIES} ${BoostLIBRARIES} rosssc32_lib )

adddependencies(rosssc32 rosjohnny5generatemessagescpp )

#### SSC32 NODE END
#### BAL NODE

set(BALINCLUDES inc/johnnylife.h )

set(BALSOURCES src/johnnylife.cpp )

addexecutable(johnnylife ${BALINCLUDES} ${BALSOURCES} )

addlibrary(johnnylife_lib src/positions.cpp )

targetlinklibraries(johnnylife ${catkinLIBRARIES} ${BoostLIBRARIES} johnnylife_lib )

adddependencies(johnnylife ppldetectiongeneratemessagescpp )

#### BAL NODE END
#### TEST NODE

set(TEST_INCLUDES inc/servo.h inc/serial.h inc/topics.h inc/robot.h )

set(TEST_SOURCES src/test.cpp src/servo.cpp src/serial.cpp inc/topics.h src/robot.cpp )

addexecutable(testnode ${TESTINCLUDES} ${TESTSOURCES} )

targetlinklibraries(testnode ${catkinLIBRARIES} ${Boost_LIBRARIES} )

adddependencies(testnode rosjohnny5generatemessagescpp )

#### TEST NODE END
#### TRACKING NODE

set(TRACKINGINCLUDES inc/johnnyskeletontracking.h inc/rawmodel.h )

set(TRACKINGSOURCES src/johnnyskeletontracking.cpp src/rawmodel.cpp )

addexecutable(trackingnode ${TRACKINGINCLUDES} ${TRACKINGSOURCES} )

targetlinklibraries(trackingnode ${catkinLIBRARIES} ${Boost_LIBRARIES} )

adddependencies(trackingnode rosjohnny5generatemessagescpp )

#### TRACKING NODE END

Asked by Dimeterious Fox on 2015-05-20 09:24:58 UTC

Comments

Can you provide the console output ? Dependency on genmsg is not necessary, only message_generation I think.

Asked by Cyril Jourdan on 2015-11-25 10:31:30 UTC

Answers

Okey, I found it. I had to add the following lines:

add_dependencies(lib_name
    ros_johnny5_generate_messages_cpp
)

for each add_library() in ros_johnny5 CMakeFile.txt too, because I use messages of project in library too.

Completely, it's look like this:

add_library(your_lib
    src1.cpp
    src2.cpp
    ...
)
add_dependencies(your_lib
    your_project_generate_messages_cpp
)

Asked by Dimeterious Fox on 2016-02-04 16:07:24 UTC

Comments

Thanks a million! I fixed this issue https://github.com/rayvburn/ORB-SLAM2_ROS/issues/2 by following your advice! It is never mentioned in catkin documentation on ROS website...

Asked by Wintermute on 2020-11-11 05:22:15 UTC