qtserialport 与 qtcreator-ros-plugin 中的 CMake?
Posted
技术标签:
【中文标题】qtserialport 与 qtcreator-ros-plugin 中的 CMake?【英文标题】:qtserialport with CMake in qtcreator-ros-plugin? 【发布时间】:2020-04-30 03:08:20 【问题描述】:我正在尝试使用 ROS 插件将 qtserialport 编译到我在 QtCreator4.9.2 中的项目中。
当然,我已经按照doc 将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 作为模块?
无论如何,我只想说:如何使用我的 ros CMake 项目编译 qtserialport?当然,它也应该适用于我的 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)
救命!
【问题讨论】:
展示 CMakeLists.txt 在 Qt4 中没有 QtSerialPort 【参考方案1】:QtCreator4.9.2 是您的 IDE 版本,而不是您可能正在使用 Qt 5.1x.x 版本的框架版本。
如果你想在你的 IDE 中编译,这一行是必不可少的
set(CMAKE_PREFIX_PATH your/qt/path/which/can/be/obtained)
从 QT Creator 中检查此路径 > 打开 Qt 项目 > 左侧栏上的项目选项 > 项目构建选项,在 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)
您还可以在 Qt 路径的 CMake 文件夹下了解包名称。
/your/sys/path/Qt5/lib/cmake
【讨论】:
以上是关于qtserialport 与 qtcreator-ros-plugin 中的 CMake?的主要内容,如果未能解决你的问题,请参考以下文章
QtSerialPort 在错误的线程中实例化,导致信号/插槽失败