当前位置: 首页 > news >正文

QT .pro文件的常见用法

定义变量

 直接定义,赋值即可,例如:PRODUCT =  "test" 

则,变量PRODUCT 可以在.pro·文件里使用

打印信息 message

例如:message("this is test") ,只要在任何地方打印这一行,编译的时候就可以在QtCreator 的General Messages 界面看到你打印的信息

 可以打印某个变量 message($$PRODUCT ) 这样就将PRODUCT这个变量打印出来

宏定义 DEFINES

如果你要定义一个宏定义就是用 DEFINES

例如:DEFINES += LOG 我定义了一个宏定义 LOG ,注意,这个宏定义是在代码中使用的,不能在.pro文件中使用,而且是全局的,这样 你在你整个项目的人地方 使用ifdef LOG 进行判断的时候都是true这种状态

获取当前编译的环境信息

COMPILER = $$system($$QMAKE_CC -v 2>&1)message(COMPIER = $$COMPILER)

这二行代码很有用,他可以打印出你当期那编译器的信息,这样你就可以知道当期那你编译的是PC x86环境还是 ARM平台

SOURCES 变量

添加你项目编译的c++文件

例如:

   SOURCES += \
RS485.cpp \
WGS84_transform.cpp \
business.cpp 

HEADERS

添加你项目要编译的头文件

例如:

HEADERS += \
business.h \
dialog.h \
mainwindow.h 

LIBS

t添加你项目以来的so库

例如:

    LIBS += -L$$PWD/libs  -lqrencode -lpaho-mqtt3c

这一行代码 相当于我项目依赖的so库的路径在当前项目根目录下的libs文件夹里 -lqrencode 依赖的so库是 qrencode.so 一般都是这样写的,前面加上-l 后面去掉.so

INCLUDEPATH

依赖的so库的头文件路径

 INCLUDEPATH += $$PWD/include

这样编译器就知道我的so库文件的开放接口,头文件的未知在include目录里

equals方法

这个方法很有用,根据这个方法,配合前面我们定义的变量使用,我们就可以编译不通的产品项目,并判断是否需要将你某个CPP文件添加编译进我们的项目

例如:

equals(PRODUCT,"QING_DAO"){message("你编译的是青岛的产品")DEFINES += QING_DAOSOURCES += \QD/consume_show.cpp \QD/play_voice.cpp \pos_upload_thread.cpp}else::equals(PRODUCT,"HE_BEI"){message("你编译的是河北的产品")DEFINES += HE_BEISOURCES += \HB/consume_show.cpp \HB/play_voice.cpp \pos_upload_thread.cpp}else::equals(PRODUCT,"TAI_ZHOU"){message("你编译的是台州的产品")DEFINES += TAI_ZHOUSOURCES += \TZ/consume_show.cpp \TZ/play_voice.cpp \TZ/pos_upload_thread.cpp}else{message("PRODUCT is  other ")
}

这样我们就可以根据不通的项目编译不通的产品,定义不通的宏定义在代码中使用

contains 方法

这个方法也很重要,表示字符转中是否含有某个字符串。我们可以根据上面获取的编译环境,来判断我们编译的是PC 平台还是arm平台,

例如:

contains(COMPILER,x86_64-linux-gnu){message("compile for x86 linux")DEFINES += IS_PCLIBS += -L$$PWD/libs -lscardappjniv2 lqrencode -lpaho-mqtt3cINCLUDEPATH += $$PWD/includeDEPENDPATH += $$PWD/include
}contains(COMPILER,arm-linux-gnueabihf){DEFINES += IS_RV1126DEFINES += USE_IPC_SERVERmessage("compile RV1126")LIBS += -L$$PWD/libs_arm_rv1126/ -lpos_ipcsocket -lscard_ipcsocket -lposoffline -lqrencode -lpaho-mqtt3cDEPENDPATH += $$PWD/includeINCLUDEPATH += $$PWD/include
}contains(COMPILER,arm-buildroot-linux-gnueabihf){DEFINES += IS_V3SDEFINES += USE_IPC_SERVERmessage("compile V3S")LIBS += -L$$PWD/libs_arm_v3s/ -lscardappjniv2 -lpaho-mqtt3cINCLUDEPATH += $$PWD/includeDEPENDPATH += $$PWD/include}#T113 arm-openwrt-linux-gnueabi
contains(COMPILER,arm-openwrt-linux-gnueabi){DEFINES += IS_T113DEFINES += USE_IPC_SERVERmessage("compile T113")LIBS += -L$$PWD/libs_arm_T113/ -lalipay_unisdk -lscardappjniv2 -lscardbaseapi -lmeituanqr -lEMVKernelcqck -lBsitCrypto  -lcurl -lssl -lcrypto -lscardlocationx -lpos_ipcsocket -lscard_ipcsocket -lposoffline  -lqrencode -lpaho-mqtt3cINCLUDEPATH += $$PWD/includeDEPENDPATH += $$PWD/include}

可以看到我们根据变异变量确认了我们使用的是哪个平台,并根据不通的平台引用不同的so文件

QMAKE_POST_LINK

这行代码表示编译完成后执行某个命令

例如:

QMAKE_POST_LINK += cp -r /home/rpdzkj/development/qt-projects/build-M702H-quanzhi-Release/M702H /home/rpdzkj/HB/

这个表示编译完成后我们就爱那个编译出来的应用copy到指定目录,这样我们就不用每次编译完成后都要copy我们编译出来的应用

http://www.dtcms.com/a/355524.html

相关文章:

  • 与trae携手,构建owtb一体化物流平台之--需求文档V0.3
  • RTL8198E SDK温控机制
  • 家电公司跨界造车,追觅能否造出“电动时代的布加迪”
  • 【架构师干货】软件工程
  • 从卡顿到丝滑:大型前端项目 CSS 优化全攻略
  • Agent实战教程:Langgraph的StateGraph以及State怎么用
  • 如何安装InfluxDB 1.7.0 Windows版(influxdb-1.7.0_windows_amd64.exe使用方法附安装包下载)​
  • 群晖 DS225+ 和绿联 DXP2800:企业文件备份方案对比
  • 仿生纺织飞行模块专利拆解:螺旋旋转结构的空气动力学与升力产生机制
  • curl打印信息实现
  • 如何将yolo训练图像数据库的某个分类的图像取出来
  • Step-by-Step: 接入淘宝商品详情 API 并解析返回数据
  • 无人机+AI光伏热斑检测技术
  • 大模型训练中对SFT和DPO的魔改——PROXIMAL SUPERVISED FINE-TUNING和Semi-online DPO论文阅读笔记
  • 锁的种类都有什么
  • Vue3 + Rsbuild 完全指南:10倍构建速度的现代前端开发方案
  • 解锁AI“黑匣”:监督、无监督与强化学习探秘
  • 某供应链金融公司多场景敏感数据安全保护实践
  • AI智能金融风控新实践:从信贷秒批到支付防护,筑牢金融安全新屏障
  • 实战经验-无mac电脑上传ipa到appstore构建版本
  • 图论好题推荐-逛公园
  • 【论文阅读】多功能肌电控制的新策略
  • Magnet Pro Macbook窗口分屏管理(Mac窗口分屏)
  • 安宝特方案丨AR异地专家远程支持平台,适合:机电运维、应急处置、监造验收
  • 光谱相机在雾霾监测中有何优势?
  • 测试题ansible临时命令模块
  • 自己定义的模型如何用hf的from_pretrained
  • Vue开发避坑:箭头函数与普通函数的正确使用指南
  • R 语言 eulerr 包绘制韦恩图:比例精准
  • 漫谈《数字图像处理》之区域生长和区域分离聚合