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
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
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