I have a workspace with 3 packages: an rqt plugin written in C++ (package A), a package with two custom messages (package B), and another C++ package (package C).
Packages A and C both rely on the custom messages defined in package B. To ensure that the dependencies for the executables in packages A and C are met, I have added the following line for each applicable executable:
`add_dependencies(executable_name ${catkin_EXPORTED_TARGETS})
`
Unfortunately, when I try to compile using `catkin_make`, I get an error saying that the header file for the messages don't exist. I'm fairly certain this error is coming from package A, the rqt plugin, since doing a catkin_make on package C alone generates no errors and successfully compiles the header files for the messages before trying to compile the executables (and catkin_make on the entire workspace works just fine after that since the header files have already been generated).
How do I go about telling catkin that the rqt plugin depends on the message files? I already have the message package name listed in the CMakeLists.txt file for the plugin as `find_package(catkin REQUIRED COMPONENTS package_b)` but that doesn't resolve the issue.
I'm currently compiling in ROS Kinetic but this issue existed in Indigo as well before I upgraded.
Any help would be appreciated.
----------
***Update*:
**CMakeLists.txt files**
Package A:
cmake_minimum_required(VERSION 2.8.3)
project(rqt_gcs)
find_package(catkin REQUIRED COMPONENTS
query_msgs
geometry_msgs
mavros
mavros_msgs
roscpp
rqt_gui
rqt_gui_cpp
roslib
sensor_msgs
std_msgs
tf
cv_bridge
image_transport
)
find_package(Qt4 COMPONENTS QtCore QtGui QtSvg REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)
find_package(OpenCV REQUIRED)
include(${QT_USE_FILE})
include(EnableCXX11)
include(MavrosMavlink)
set(rqt_gcs_SRCS
src/rqt_gcs/simple_gcs.cpp
src/rqt_gcs/simple_control.cpp
src/FIS/qfi_PFD.cpp
src/FIW/LayoutSquare.cpp
src/FIW/WidgetPFD.cpp
src/rqt_image_view/ratio_layouted_frame.cpp
)
set(rqt_gcs_HDRS
include/rqt_gcs/simple_gcs.h
include/FIS/qfi_PFD.h
include/FIW/LayoutSquare.h
include/FIW/WidgetPFD.h
include/rqt_image_view/ratio_layouted_frame.h
)
set(rqt_gcs_UIS
resources/gcs.ui
resources/AccessPointsMenu.ui
resources/AccessPointStats.ui
resources/MissionSelect.ui
resources/MissionCancel.ui
resources/MissionProgress.ui
resources/UavStat.ui
resources/UavQuestion.ui
resources/QuadStats.ui
resources/WidgetPFD.ui
resources/PFDWidget_custom.ui
resources/WidgetMain.ui
resources/UAVCondition.ui
resources/ImageView.ui
resources/MissionConfirm.ui
resources/PictureMsg.ui
)
SET(rqt_gcs_RCCS resources/qfi.qrc)
set(rqt_gcs_INCLUDE_DIRECTORIES
include
${CMAKE_CURRENT_BINARY_DIR}
)
catkin_python_setup()
catkin_package(
INCLUDE_DIRS ${rqt_gcs_INCLUDE_DIRECTORIES}
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp rqt_gui rqt_gui_cpp std_msgs sensor_msgs
)
include_directories(include
${Qt4_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
add_definitions(${Qt4_DEFINITIONS})
qt4_add_resources(rqt_gcs_RCC_SRCS ${rqt_gcs_RCCS})
qt4_wrap_cpp(rqt_gcs_MOCS ${rqt_gcs_HDRS})
qt4_wrap_ui(rqt_gcs_UIS_H ${rqt_gcs_UIS})
include_directories(${rqt_gcs_INCLUDE_DIRECTORIES}
${Boost_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS})
# Declare executables with source files
add_executable(simple_control src/rqt_gcs/simple_control.cpp)
add_executable(gps_publisher src/rqt_gcs/gps_publisher.cpp)
add_executable(gps_demo src/rqt_gcs/gps_demo.cpp)
add_executable(connection_manager src/rqt_gcs/connection_manager.cpp)
add_executable(safe_mocap src/rqt_gcs/safe_mocap.cpp)
add_dependencies(simple_control ${catkin_EXPORTED_TARGETS})
add_dependencies(gps_demo ${catkin_EXPORTED_TARGETS})
add_library(${PROJECT_NAME}
${rqt_gcs_SRCS}
${rqt_gcs_MOCS}
${rqt_gcs_UIS_H}
${rqt_gcs_RCC_SRCS})
#Specify libraries against which to link
target_link_libraries(simple_control ${catkin_LIBRARIES})
target_link_libraries(gps_publisher ${catkin_LIBRARIES})
target_link_libraries(gps_demo ${catkin_LIBRARIES})
target_link_libraries(connection_manager ${catkin_LIBRARIES})
target_link_libraries(safe_mocap ${catkin_LIBRARIES})
target_link_libraries( ${PROJECT_NAME}
${catkin_LIBRARIES}
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
${QT_QTSVG_LIBRARY}
${OpenCV_LIBRARIES}
)
find_package(class_loader)
class_loader_hide_library_symbols(${PROJECT_NAME})
install(FILES plugin.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
install(PROGRAMS scripts/rqt_gcs
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
install(PROGRAMS scripts/rqt_gcs
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)
Package B:
cmake_minimum_required(VERSION 2.8.3)
project(query_msgs)
find_package(catkin REQUIRED COMPONENTS message_generation
sensor_msgs
geometry_msgs)
include_directories(include)
add_message_files(
DIRECTORY msg
FILES
Door.msg
Target.msg)
generate_messages(DEPENDENCIES sensor_msgs geometry_msgs)
catkin_package(CATKIN_DEPENDS message_runtime sensor_msgs geometry_msgs)
----------
**Package.xml files**
Package A:
rqt_gcs 0.0.0 The rqt_gcs package hovig TODO catkin roscpp rqt_gui rqt_gui_cpp mav_control std_msgs sensor_msgs query_msgs roscpp rqt_gui rqt_gui_cpp rostopic std_msgs mav_control sensor_msgs query_msgs
Package B:
query_msgs 0.0.0 The query_msgs package serl TODO catkin message_generation sensor_msgs geometry_msgs message_runtime sensor_msgs geometry_msgs
----------
**The compile output** (Error is where it says `No such file or directory`)
[ 0%] Built target sensor_msgs_generate_messages_eus
[ 0%] Built target geometry_msgs_generate_messages_eus
[ 0%] Built target _query_msgs_generate_messages_check_deps_Door
[ 0%] Built target sensor_msgs_generate_messages_nodejs
[ 0%] Built target geometry_msgs_generate_messages_nodejs
[ 0%] Built target _query_msgs_generate_messages_check_deps_Target
[ 0%] Built target geometry_msgs_generate_messages_lisp
[ 0%] Built target sensor_msgs_generate_messages_lisp
[ 0%] Built target geometry_msgs_generate_messages_py
[ 0%] Built target sensor_msgs_generate_messages_py
[ 0%] Built target sensor_msgs_generate_messages_cpp
[ 0%] Built target geometry_msgs_generate_messages_cpp
[ 4%] Built target stereo_driver
[ 7%] Built target camera_publisher
[ 10%] Built target stereo_publisher
[ 12%] Built target camera_subscriber
[ 12%] Built target std_msgs_generate_messages_py
[ 12%] Built target stereo_msgs_generate_messages_eus
[ 12%] Built target std_msgs_generate_messages_cpp
[ 12%] Built target std_msgs_generate_messages_eus
[ 12%] Built target std_msgs_generate_messages_nodejs
[ 12%] Built target std_msgs_generate_messages_lisp
[ 12%] Built target stereo_msgs_generate_messages_py
[ 12%] Built target rosgraph_msgs_generate_messages_cpp
[ 12%] Built target roscpp_generate_messages_py
[ 12%] Built target rosgraph_msgs_generate_messages_eus
[ 12%] Built target rosgraph_msgs_generate_messages_nodejs
[ 12%] Built target roscpp_generate_messages_cpp
[ 12%] Built target rosgraph_msgs_generate_messages_lisp
[ 12%] Built target rosgraph_msgs_generate_messages_py
[ 12%] Built target roscpp_generate_messages_nodejs
[ 12%] Built target stereo_msgs_generate_messages_cpp
[ 12%] Built target stereo_msgs_generate_messages_nodejs
[ 12%] Built target roscpp_generate_messages_lisp
[ 12%] Built target roscpp_generate_messages_eus
[ 12%] Built target stereo_msgs_generate_messages_lisp
[ 15%] Built target object_avoidance
[ 18%] Built target safe_mocap
[ 20%] Building CXX object rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_gcs.cpp.o
[ 22%] Built target connection_manager
[ 24%] Building CXX object rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_control.cpp.o
[ 25%] Building CXX object rqt_gcs/CMakeFiles/gps_publisher.dir/src/rqt_gcs/gps_publisher.cpp.o
[ 25%] Built target tf_generate_messages_py
[ 25%] Built target nav_msgs_generate_messages_lisp
[ 25%] Built target nodelet_generate_messages_nodejs
[ 25%] Built target actionlib_generate_messages_py
[ 25%] Built target nav_msgs_generate_messages_nodejs
[ 25%] Built target tf2_msgs_generate_messages_cpp
[ 25%] Built target actionlib_generate_messages_eus
[ 25%] Built target tf_generate_messages_cpp
[ 25%] Built target actionlib_generate_messages_cpp
[ 25%] Built target tf2_msgs_generate_messages_py
[ 25%] Built target actionlib_msgs_generate_messages_nodejs
[ 25%] Built target actionlib_msgs_generate_messages_lisp
[ 25%] Built target diagnostic_msgs_generate_messages_eus
[ 27%] Building CXX object rqt_gcs/CMakeFiles/rqt_gcs.dir/src/FIS/qfi_PFD.cpp.o
In file included from /home/karanvir/Documents/lcar-bot/src/rqt_gcs/src/rqt_gcs/simple_control.cpp:1:0:
/home/karanvir/Documents/lcar-bot/src/rqt_gcs/include/rqt_gcs/simple_control.h:33:29: fatal error: query_msgs/Door.h: No such file or directory
compilation terminated.
rqt_gcs/CMakeFiles/rqt_gcs.dir/build.make:208: recipe for target 'rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_control.cpp.o' failed
make[2]: *** [rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_control.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /home/karanvir/Documents/lcar-bot/src/rqt_gcs/include/rqt_gcs/simple_gcs.h:7:0,
from /home/karanvir/Documents/lcar-bot/src/rqt_gcs/src/rqt_gcs/simple_gcs.cpp:1:
/home/karanvir/Documents/lcar-bot/src/rqt_gcs/include/rqt_gcs/simple_control.h:33:29: fatal error: query_msgs/Door.h: No such file or directory
compilation terminated.
rqt_gcs/CMakeFiles/rqt_gcs.dir/build.make:184: recipe for target 'rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_gcs.cpp.o' failed
make[2]: *** [rqt_gcs/CMakeFiles/rqt_gcs.dir/src/rqt_gcs/simple_gcs.cpp.o] Error 1
[ 27%] Built target diagnostic_msgs_generate_messages_nodejs
[ 27%] Built target mavros_msgs_generate_messages_cpp
[ 27%] Built target actionlib_msgs_generate_messages_py
[ 27%] Built target actionlib_generate_messages_nodejs
[ 27%] Built target actionlib_msgs_generate_messages_cpp
[ 27%] Built target nav_msgs_generate_messages_cpp
[ 27%] Built target nodelet_generate_messages_py
[ 27%] Built target diagnostic_msgs_generate_messages_cpp
[ 27%] Built target tf_generate_messages_nodejs
[ 27%] Built target nav_msgs_generate_messages_py
[ 27%] Built target nav_msgs_generate_messages_eus
[ 27%] Built target tf2_msgs_generate_messages_lisp
[ 27%] Built target diagnostic_msgs_generate_messages_py
[ 27%] Built target tf_generate_messages_lisp
[ 27%] Built target mavros_msgs_generate_messages_eus
[ 27%] Built target mavros_msgs_generate_messages_lisp
[ 27%] Built target tf_generate_messages_eus
[ 27%] Built target mavros_msgs_generate_messages_py
[ 27%] Built target tf2_msgs_generate_messages_eus
[ 27%] Built target nodelet_generate_messages_cpp
[ 27%] Built target nodelet_generate_messages_lisp
[ 27%] Built target mavros_msgs_generate_messages_nodejs
[ 27%] Built target bond_generate_messages_cpp
CMakeFiles/Makefile2:2160: recipe for target 'rqt_gcs/CMakeFiles/rqt_gcs.dir/all' failed
make[1]: *** [rqt_gcs/CMakeFiles/rqt_gcs.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 27%] Built target diagnostic_msgs_generate_messages_lisp
[ 27%] Built target bond_generate_messages_eus
[ 28%] Linking CXX executable /home/karanvir/Documents/lcar-bot/devel/lib/rqt_gcs/gps_publisher
[ 28%] Built target gps_publisher
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Base path: /home/karanvir/Documents/lcar-bot
Source space: /home/karanvir/Documents/lcar-bot/src
Build space: /home/karanvir/Documents/lcar-bot/build
Devel space: /home/karanvir/Documents/lcar-bot/devel
Install space: /home/karanvir/Documents/lcar-bot/install
####
#### Running command: "make cmake_check_build_system" in "/home/karanvir/Documents/lcar-bot/build"
####
####
#### Running command: "make -j4 -l4" in "/home/karanvir/Documents/lcar-bot/build"
####
Invoking "make -j4 -l4" failed
↧