catkin_make не может создать исполняемый файл и автоматически скопировать заголовочные файлы для разработки

Когда я запустил свой catkin_make, я понимаю, что он должен автоматически копировать файлы заголовков, которые я включил в основной файл cpp, в devel и создавать исполняемый файл, однако это не так.

Ошибка:

Linking CXX executable /home/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node
/usr/bin/ld: cannot find -lmosquitto.h
collect2: error: ld returned 1 exit status
make[2]: *** [/home/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node] Error 1
make[1]: *** [mqtt_pub/CMakeFiles/mqtt_pub_node.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j1 -l1" failed

Обратите внимание, что mqtt_pub_node не существует. Почему он ищет то, чего не существует? Это должно быть автоматически создано. Из того, что я знаю, исполняемый файл должен находиться в devel / lib / mqtt_pub, но я не уверен, что система думает о mqtt_pub_node (каталог). Если я создаю dir mqtt_pub_node и помещаю в него свой заголовочный файл, catkin_make будет успешным, но исполняемый файл не будет создан.

[EDIT] Заголовочные файлы должны быть скопированы в devel / include, но в моем catkin_ws такой директории нет.

Cmakelist

find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)

catkin_package(
INCLUDE_DIRS include
LIBRARIES mqtt_pub
CATKIN_DEPENDS roscpp std_msgs
DEPENDS system_lib
)

include_directories(
${catkin_INCLUDE_DIRS}
/catkin_ws/src/mqtt_pub/include/mqtt_pub
include
)

link_directories(
/catkin_ws/src/mqtt_pub/include/mqtt_pub
)

link_libraries(
mosquitto.h
)

add_executable(mqtt_pub_node src/mqtt_publish.cpp)
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES})

Был бы признателен за руководство, спасибо!

[РЕДАКТИРОВАТЬ] Ошибка решения, предоставленного cassinaj

CMakeFiles/mqtt_pub_node.dir/src/mqtt_publish.cpp.o: In function `main':
mqtt_publish.cpp:(.text+0x1f8): undefined reference to `mosquitto_lib_init'
mqtt_publish.cpp:(.text+0x210): undefined reference to `mosquitto_new'
mqtt_publish.cpp:(.text+0x237): undefined reference to   `mosquitto_username_pw_set'
mqtt_publish.cpp:(.text+0x259): undefined reference to `mosquitto_connect'
mqtt_publish.cpp:(.text+0x285): undefined reference to `mosquitto_loop_start'
mqtt_publish.cpp:(.text+0x2bc): undefined reference to `mosquitto_publish'
mqtt_publish.cpp:(.text+0x2d0): undefined reference to `mosquitto_loop_stop'
mqtt_publish.cpp:(.text+0x2df): undefined reference to `mosquitto_disconnect'
mqtt_publish.cpp:(.text+0x2ee): undefined reference to `mosquitto_destroy'
mqtt_publish.cpp:(.text+0x2f3): undefined reference to `mosquitto_lib_cleanup'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/lorawan/catkin_ws/devel/lib/mqtt_pub/mqtt_pub_node] Error 1
make[1]: *** [mqtt_pub/CMakeFiles/mqtt_pub_node.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j1 -l1" failed

0

Решение

С сережкой вам обычно не нужно link_directories(...) и вам не нужно link_libraries(mosquitto.h) который вызывает вашу проблему. С последним вы говорите cmake связать все библиотеки и исполняемые файлы с библиотекой с именем mosquitto.h, который не является библиотекой, а только заголовочный файл.
Попробуйте следующее:

find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
)

catkin_package(
INCLUDE_DIRS include
# LIBRARIES mqtt_pub
CATKIN_DEPENDS roscpp std_msgs
)

include_directories(
${catkin_INCLUDE_DIRS}
/catkin_ws/src/mqtt_pub/include/mqtt_pub
include
)

add_executable(mqtt_pub_node src/mqtt_publish.cpp)
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES})

Обратите внимание, что я закомментировал LIBRARIES mqtt_pub линия, потому что это требует, чтобы вы на самом деле строили библиотеку с именем mqtt_pub,

0

Другие решения

Решаемые. При использовании Mosquitto мне пришлось связать клиентскую библиотеку в моем CMakeList. В основном это файл libmosquitto.so, который является клиентской библиотекой.

Я добавил следующее в свой список cmake:

set(Mosquitto_libs
/usr/lib/x86_64-linux-gnu/libmosquitto.so
/usr/lib/x86_64-linux-gnu/libmosquitto.so.1
)
target_link_libraries(mqtt_pub_node ${catkin_LIBRARIES} ${Mosquitto_libs})
0