qtserialport с CMake в qtcreator-ros-plugin? - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь скомпилировать qtserialport для моего проекта в QtCreator4.9.2 с подключаемым модулем ROS.

Конечно, я следовал инструкциям do c для установки qtserialport на свой Ubuntu16.04. А потом я провел несколько тестов, подобных этому:

#include "QtSerialPort/qserialport.h"
#include "QtSerialPort/qserialportinfo.h"

...

Q_FOREACH(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
    ROS_INFO("Name: %s", info.portName().toStdString().c_str());
    ROS_INFO("Description: %s", info.description().toStdString().c_str());
    ROS_INFO("Manufacturer: %s", info.manufacturer().toStdString().c_str());
    ...
}

Но, получите ошибку:

undefined reference to 'QSerialPortInfo::availablePorts()'
undefined reference to 'QSerialPortInfo::portName() const'
undefined reference to 'QSerialPortInfo::description() const'
...
undefined reference to 'QSerialPortInfo::~QSerialPortInfo()'

Вы знаете, я работаю с CMake, так что официальные документы о qmake или .pro введение для меня бесполезно. И я нашел несколько предложений, таких как this , однако меня смущает следующее: как сделать qtserialport модулем?

В любом случае, все, что я хочу сказать, это: как я могу скомпилировать qtserialport с моим проектом CMake? И, конечно, он также должен работать с моим QtCreator.

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.0)
project(xxx)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS qt_build roscpp)
include_directories(${catkin_INCLUDE_DIRS})
catkin_package()

rosbuild_prepare_qt4(QtCore QtGui QtOpenGL)

file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} rsources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/xxx/*.hpp)

QT4_ADD_RESOURCES(QT_RSOURCES_CPP ${QT_RESOURCES})
QT4_WRAP_CPP(QT_MOC_HPP ${QT_MOC})

set(QT_SOURCES ...)
if(MSVC)
    set(...)
endif(MSVC)

add_definitions(...)
include_directories(...)
set(EXTERNAL_LIBRARIES OpenThreads osg osgDB osgViewer osgUtil osgText osgGA pthread lz4 bz2)

add_executable(... ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_MOC_HPP})
target_link_libraries(xxx ${QT_LIBRARIES} ${EXTERNAL_LIBRARIES} ${catkin_LIBRARIES})
install(TARGETS xxx RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

Справка!

1 Ответ

0 голосов
/ 30 апреля 2020

QtCreator4.9.2 - это версия вашей IDE, а не версия платформы, которую вы, вероятно, используете в версии Qt 5.1xx.

Если вы хотите скомпилировать из вашей IDE, эта строка необходима

set(CMAKE_PREFIX_PATH your/qt/path/which/can/be/obtained)

проверьте этот путь в QT Creator> Откройте опцию Qt Project> Projects на левой панели> Опция сборки проекта, в настройках CMake проверьте cmake_prefix_path

# Before add_executable
find_package(Qt5 COMPONENTS Core SerialPort REQUIRED)

# After add_executable
target_link_libraries(${PROJECT_NAME} PRIVATE
    Qt5::Core Qt5::SerialPort)

Вы также можете узнать имена пакетов в папке CMake вашего Qt путь.

/your/sys/path/Qt5/lib/cmake
...