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文件添加编译进我们的项目

例如:

bash 复制代码
equals(PRODUCT,"QING_DAO"){
    message("你编译的是青岛的产品")
    DEFINES += QING_DAO
    SOURCES += \
       QD/consume_show.cpp \
       QD/play_voice.cpp \
       pos_upload_thread.cpp

}else::equals(PRODUCT,"HE_BEI"){
    message("你编译的是河北的产品")
    DEFINES += HE_BEI
    SOURCES += \
        HB/consume_show.cpp \
        HB/play_voice.cpp \
        pos_upload_thread.cpp

}else::equals(PRODUCT,"TAI_ZHOU"){
    message("你编译的是台州的产品")
    DEFINES += TAI_ZHOU
    SOURCES += \
         TZ/consume_show.cpp \
         TZ/play_voice.cpp \
         TZ/pos_upload_thread.cpp

}else{
     message("PRODUCT is  other ")
}

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

contains 方法

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

例如:

bash 复制代码
contains(COMPILER,x86_64-linux-gnu){
    message("compile for x86 linux")

    DEFINES += IS_PC
    LIBS += -L$$PWD/libs -lscardappjniv2 lqrencode -lpaho-mqtt3c
    INCLUDEPATH += $$PWD/include
    DEPENDPATH += $$PWD/include
}


contains(COMPILER,arm-linux-gnueabihf){
    DEFINES += IS_RV1126
    DEFINES += USE_IPC_SERVER
    message("compile RV1126")
    LIBS += -L$$PWD/libs_arm_rv1126/ -lpos_ipcsocket -lscard_ipcsocket -lposoffline -lqrencode -lpaho-mqtt3c
    DEPENDPATH += $$PWD/include
    INCLUDEPATH += $$PWD/include
}



contains(COMPILER,arm-buildroot-linux-gnueabihf){
    DEFINES += IS_V3S
    DEFINES += USE_IPC_SERVER
    message("compile V3S")
    LIBS += -L$$PWD/libs_arm_v3s/ -lscardappjniv2 -lpaho-mqtt3c
    INCLUDEPATH += $$PWD/include
    DEPENDPATH += $$PWD/include


}



#T113 arm-openwrt-linux-gnueabi
contains(COMPILER,arm-openwrt-linux-gnueabi){
    DEFINES += IS_T113
    DEFINES += USE_IPC_SERVER
    message("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-mqtt3c
    INCLUDEPATH += $$PWD/include
    DEPENDPATH += $$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我们编译出来的应用

相关推荐
-Thinker2 分钟前
【无标题】
java·开发语言·算法·图搜索
王五周八5 分钟前
Tesseract OCR的Java使用(附安装包,非常详细)
java·开发语言·ocr
旧书包的青春6 分钟前
2026年6月11日
java
凡人叶枫10 分钟前
Effective C++ 条款24:若所有参数皆须要类型转换,请为此采用 non-member 函数
linux·前端·c++·算法·嵌入式开发
零陵上将军_xdr14 分钟前
Shell流程控制:if/case/for/while让脚本活起来
linux·运维·服务器
实在智能RPA19 分钟前
航空Agent落地效果评估指标:2026年企业级智能自动化价值度量体系拆解
java·网络·人工智能·ai·自动化
Henry Zhu12320 分钟前
Qt 元对象系统源码级理解
qt
坤昱21 分钟前
cfs调度类深入解刨——pelt细节篇
linux·linux内核·cfs调度·eevdf·cfs调度类深入解刨·pelt·pelt细节篇
程序员二叉25 分钟前
【JUC】AQS底层深度拆解|独占/共享模式|队列原理全详解
java·开发语言·面试·juc
读书札记202229 分钟前
Qt中windeployqt.exe工具的使用:解决使用CMake创建的项目点击exe文件后系统提示0xc000007b的问题
开发语言·qt