项目场景:
自己写了一个包A,内部有一个名字为AA的msg定义,此节点发送内容为A的消息。同样的工程下面,另一个包B需要用到AA这个消息内容,并且接收A包发出来的消息内容,使用catkin_make编译的是时候报错
问题描述
catkin_make编译 报错如下:
CMake Error at /home/nvidia/Workspace/controller/RobotMiniControllerAlpha/build/sensor_8SPExpansion_BNode/cmake/sensor_8SPExpansion-genmsg.cmake:46 (add_custom_target):
add_custom_target cannot create target
"sensor_8SPExpansion_generate_messages_cpp" because another target with the
same name already exists. The existing target is a custom target created
in source directory
"/home/nvidia/Workspace/controller/RobotMiniControllerAlpha/src/MCtrlNodeV3".
See documentation for policy CMP0002 for more details.
Call Stack (most recent call first):
/opt/ros/melodic/share/genmsg/cmake/genmsg-extras.cmake:307 (include)
sensor_8SPExpansion_BNode/CMakeLists.txt:84 (generate_messages)
但是使用单包节点一个一个编译,就可以编译过去:
编译包A
catkin_make -DCATKIN_WHITELIST_PACKAGES="Aname"
编译包B
catkin_make -DCATKIN_WHITELIST_PACKAGES="Bname"
原因分析:
最后的找到的原因是包的package.xml 中包依赖没有和cmakelist.txt中设置一致
cmakelist.txt:
主要是上面Aname是我自己的一个包,一定要在package.xml中 <build_depend> 里面加上
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs sensor_msgs image_transport Aname )
package.xml:
<build_depend>message_generation</build_depend>
<build_depend>Aname</build_depend>
<build_depend>image_transport</build_depend>
<run_depend>message_runtime</run_depend>
<run_depend>Aname</run_depend>
<run_depend>image_transport</run_depend>
解决方案:
修改包B的package.xml,和cmakelist.txt
编译通过
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)