【QT学习】如何将一个QT的pro工程(qmake编译)移植变成一个cmake编译的工程

38 篇文章 0 订阅
6 篇文章 0 订阅

1.背景

之前使用qt自带的编译方式(qmake的方式)编写运行qt程序,但是最近要跟ros框架的其他程序进行通讯要使用ros topic订阅发布,必须用msg,有些msg不能简单的使用std标准消息需要自己定义,但是qmake的方式不支持只能用ros自己的方式,因此想要将自己的程序变成ros放在Ros的框架中,使用cmake的编译方式

 2.工程说明

 1.QT程序中使用了widget类跟qml结合的方式。
 2. 工程中调用的qt的库:

QT += core gui network quick qml positioning location quickwidgets

3.步骤(以自己的工程为例)

3.1 创建工作空间文件夹,并执行编译

mkdir -p ~/ros_qt_workspace/src
cd ~/ros_qt_workspace/
catkin_make

3.2 创建ros工程:

cd src #进入src目录
catkin_creat_pkg qt_app roscpp std_msgs #创建ros工程(工程名qt_app, 依赖roscpp std_msgs)

3.3 将对应的自己程序的目录放在src下面:

自己原有proj程序的目录

将自己的 文件移植到上面的src文件下:

自己单独把原来调用的外部lib放在跟src同级下面(也可以放在src下)

注意:移植后别忘了修改cpp中调用的头文件(因为对应的目录发生了变化)

3.4 修改cmakelist文件

##############################################################################
# CMake version
##############################################################################

cmake_minimum_required(VERSION 2.8.3)

##############################################################################
# Project name
##############################################################################
project(app)

##############################################################################
# Catkin
##############################################################################
## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
add_definitions(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

##############################################################################
# Qt Environment
##############################################################################
find_package(Qt5  REQUIRED COMPONENTS  Widgets Core Gui Qml QuickWidgets Network Location Positioning)
#find_package(Qt5Widgets CONFIG REQUIRED)

###################################
## catkin specific configuration ##
###################################
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES truck_monitor
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)

###########
## Build ##
###########
include_directories(
  include/
  ${CMAKE_CURRENT_BINARY_DIR}/..
  ${catkin_INCLUDE_DIRS}
)

##############################################################################
# Sections
##############################################################################
set(CMAKE_AUTOMOC ON) # 设置自动生成moc文件,AUTOMOC打开可以省去QT5_WRAP_CPP命令
set(CMAKE_AUTORCC ON) # Resource files
set(CMAKE_AUTOUIC ON) # 设置自动生成ui.h文件,AUTOUIC打开可以省去QT5_WRAP_UI命令
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置工程包含当前目录,非必须

##############################################################################
# Sources
##############################################################################
file(GLOB_RECURSE SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)
#同理,查找当前文件夹中所有的头文件
file(GLOB_RECURSE HEAD_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.h)

#添加资源文件
SET(RCC_FILES src/source.qrc)

##############################################################################
# Binaries
##############################################################################

link_directories(${PROJECT_SOURCE_DIR}/lib) #添加动态连接库的路径

##############################################################################
# 创建工程文件
##############################################################################
add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RCC_FILES})
 
target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES} ${catkin_LIBRARIES})
target_link_libraries(${PROJECT_NAME}  Qt5::Widgets Qt5::Core Qt5::Gui Qt5::Qml Qt5::QuickWidgets Qt5::Network Qt5::Location Qt5::Positioning)
target_link_libraries(${PROJECT_NAME} -ltcptd ) #这是自己调用的外部库
target_link_libraries(${PROJECT_NAME} -lsudp ) #这是自己调用的外部库

3.5 运行程序

声明:自己在书写cmakelist文件以及运行程序的时候还是使用qt。但是还可以使用ros的catkin_make。

方法:(在修改cmaklist之前)

3.5.1 打开qt creator

3.5.2 打开文件---》找到src下面的cmakelists.txt文件,打开

3.5.3 可以在qt中修改cmakelists.txt文件以及对应的其他文件,编译运行的时候还是点击绿色的箭头。

 

生成的程序以及对应的配置文件放在:

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值