项目场景:

自己写了一个包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

编译通过

 

 

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐