1. 问题
经常我们会自定义一些 msg 给其他的 package 使用, 如果正常写 CmakeLists.txt 在编译的时候,就会提示没有找到依赖的 msg.
需要先编译 msg 的 package, 再编译其他的 package , 这就很麻烦
2. 解决
想到 lego-loam 里面也是依赖 cloud_info.msg, 但是编译的时候却不会出现这个问题, 看一下他是怎么写的 CmakeLists.txt 的:
cmake_minimum_required(VERSION 2.8.3)
project(lego_loam)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
find_package(catkin REQUIRED COMPONENTS
tf
roscpp
rospy
cv_bridge
image_transport
pcl_ros
pcl_conversions
std_msgs
sensor_msgs
geometry_msgs
nav_msgs
cloud_msgs
common
)
find_package(Boost REQUIRED COMPONENTS system thread timer)
find_package(GTSAM REQUIRED QUIET)
find_package(PCL REQUIRED QUIET)
find_package(OpenCV REQUIRED QUIET)
catkin_package(
INCLUDE_DIRS include
CATKIN_DEPENDS cloud_msgs
DEPENDS PCL
)
include_directories(
include
${catkin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
${GTSAM_INCLUDE_DIR}
)
link_directories(
include
${OpenCV_LIBRARY_DIRS}
${PCL_LIBRARY_DIRS}
${GTSAM_LIBRARY_DIRS}
)
add_executable(imageProjection src/imageProjection.cpp)
add_dependencies(imageProjection ${catkin_EXPORTED_TARGETS} cloud_msgs_gencpp)
target_link_libraries(imageProjection ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBRARIES})
add_executable(featureAssociation src/featureAssociation.cpp)
add_dependencies(featureAssociation ${catkin_EXPORTED_TARGETS} cloud_msgs_gencpp)
target_link_libraries(featureAssociation ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBRARIES})
add_executable(mapOptmization src/mapOptmization.cpp)
target_link_libraries(mapOptmization ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBRARIES} gtsam)
add_executable(transformFusion src/transformFusion.cpp)
target_link_libraries(transformFusion ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBRARIES})
可以看到:
add_executable(imageProjection src/imageProjection.cpp)
add_dependencies(imageProjection ${catkin_EXPORTED_TARGETS} cloud_msgs_gencpp)
target_link_libraries(imageProjection ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBRARIES})
多了一行:
add_dependencies(imageProjection ${catkin_EXPORTED_TARGETS} cloud_msgs_gencpp)
使用 add_dependencies
添加了 依赖 cloud_msgs_gencpp
如果缺少 add_dependencies 中对 cloud_msgs_gencpp 的依赖声明,在编译的时候如果先编译imageProjection 包再编译 cloud_msgs 包则会出现报错.
ROS工作空间各个软件包的编译顺序是随机的,此时头文件cloud_msgs/cloud_info.h 还未生成
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)