当前位置: 首页 > 工具软件 > Qmake > 使用案例 >

qmake构建项目详细讲解

西门经国
2023-12-01

目录

1.使用qmake生成.pro文件

2.根据pro文件生成Makefile文件

3.配置你的pro文件

3.1 配置项目属于LIB还是APP

3.2 设置生成文件名称

3.3 支持debug和32位程序

3.4 临时文件输出目录

3.5 定义变量

3.6 设置你的程序版本号

3.7 pro文件里使用linux命令

3.8 设置头文件路径

3.9 设置库文件目录

4.0 指定要编译的头文件

4.1 指定要编译的文件


qmake是trolltech公司开发的跨平台Makefile生成工具,它被QT用来管理项目工程,无论你的项目是否使用QT编写都可以使用qmake来管理你的项目,因为这样你就不用去写复杂的makefile,虽然已经有cmake了但是qmake会比cmake更简单。

虽然qmake不像cmake多元化,但是qmake至少能够让你快速将一个平台的项目工程迁移到另外一个平台。

如你有一个项目使用visual studio开发的,想要迁移到Linux环境下,要知道linux环境除了QT以外的可视化开发IDE以外几乎没有较好的开发环境,一般都是在终端下进行命令开发编写makefile,在面对数以计万的源代码文件中,我们如何梳理这些文件?难不成写makefile一个一个包含进来?太low了,使用qmake一个命令帮你搞定。

1.使用qmake生成.pro文件

参数:project

用途:根据项目工程生成对应的pro文件

示列:

qmake -project 你的项目文件夹根路径

生成之后会在当前执行这条命令的目录下生成跟目录相同的pro文件

 

2.根据pro文件生成Makefile文件

参数:无

示列:

qmake

只要当前目录下有.pro文件,只需要使用qmake就可以了,qmake会自动解析pro文件生成对应的Makefile

你也可以指定pro文件

qmake xxx.pro

然后你就可以make一下了。

如果没有任何意外就会正常编译生成你想要的构建文件。

 

3.配置你的pro文件

基本上我们自动化生成pro文件之后都需要进行一次配置,基本配置就是告诉qmake你的程序是lib还是app,以及头文件位置,库的依赖,简单配置一下就可以了,包括支持debug和32bit的选项。

Linux下的qmake默认是不生成32bit和debug版本的Makefile。

3.1 配置项目属于LIB还是APP

可执行程序:

TEMPLATE = app

lib:

TEMPLATE = lib

3.2 设置生成文件名称

TARGET = xxxx

这个属性决定了生成文件后的名字

3.3 支持debug和32位程序

CONFIG += debug_and_release \
	      32bit

这个属性是告诉qmake debug和release都支持,否则qmake默认只release,同时也要能够支持32bit的程序

当使用了这个属性的时候我们就可以设置debug和release生成文件的输出路径

#Debug and Release 32/64
CONFIG(debug, debug|release){
		contains(DEFINES, 32bit) {
 			DESTDIR = xxx
		}else {
			DESTDIR = xxx
		}
}else{
		contains(DEFINES, 32bit) {
 			DESTDIR = xxx
		}else {
			DESTDIR = xxx
		}
}

上面这段代码很简单CONFIG检查debug,如果不是debug则else是release

在块语句里的contains是用来检查当前是32bit还是64bit

DESTDIR是指定输出目录

3.4 临时文件输出目录

OBJECTS_DIR = xxx

3.5 定义变量

pro文件里和shell定义变量一样

#Different attributes
DEBUG_DIR_32 = $${THIS_DIR}/../../linux_output/debug/x32
DEBUG_DIR_64 = $${THIS_DIR}/../../linux_output/debug/x64
RELEASE_DIR_32 = $${THIS_DIR}/../../linux_output/release/x32
RELEASE_DIR_64 = $${THIS_DIR}/../../linux_output/release/x64

引用也很简单:

$${xxxx}

注意前面是两个$$

3.6 设置你的程序版本号

VERSION=1.0.0

3.7 pro文件里使用linux命令

$$(PWD)

注意是$$()括号里写命令即可

3.8 设置头文件路径

INCLUDEPATH += xxx

3.9 设置库文件目录

#Lib Path
LIBS += xxx

库文件和头文件一定要用 += 不要去用=,因为可能有一些依赖库路径与头文件在里面。

4.0 指定要编译的头文件

HEADERS += xxx.h

4.1 指定要编译的文件

SOURCES += xxx.c

c或者cpp都可以。

 

当你完成你想要的配置之后别忘记qmake让其生效,然后make

最后在给大家献上我自己写的pro文件,大家可以用来参考

######################################################################
# Author: Stephen_Zhou
# Time: 2021-4-7 11:14
# Rely: qmake (3.1)
######################################################################

#Config
#Generate
TEMPLATE = lib
TARGET = QEthRadar

#Architecture
CONFIG += debug_and_release \
	      32bit

#Version
VERSION=1.0.0

#Path
#Project
THIS_DIR=$$(PWD)
SRC_DIR=$${THIS_DIR}/../../all_src/QEthRadar
SRC_PATH = $${THIS_DIR}/../../all_src
WEYE_HOME_DIR = $${THIS_DIR}/../../
TEMP_DIR = $${WEYE_HOME_DIR}/linux_tmp

#Different attributes
DEBUG_DIR_32 = $${THIS_DIR}/../../linux_output/debug/x32
DEBUG_DIR_64 = $${THIS_DIR}/../../linux_output/debug/x64
RELEASE_DIR_32 = $${THIS_DIR}/../../linux_output/release/x32
RELEASE_DIR_64 = $${THIS_DIR}/../../linux_output/release/x64

#Depend on the file
WEYE_COMM_DIR = $${SRC_PATH}/weye_comm
RELY_DIR = $${THIS_DIR}/../rely
UP_DIR = $${THIS_DIR}/../
WEUTILS_INCLUDE_DIR = $${SRC_PATH}/WeUtils/include

#Libary
PCAP_LIB = $${RELY_DIR}/lib/pcap/lib*

#Temp
OBJECTS_DIR = $${TEMP_DIR}

#Debug and Release 32/64
CONFIG(debug, debug|release){
		contains(DEFINES, 32bit) {
 			DESTDIR = $${DEBUG_DIR_32}
		}else {
			DESTDIR = $${DEBUG_DIR_64}
		}
}else{
		contains(DEFINES, 32bit) {
 			DESTDIR = $${RELEASE_DIR_32}
		}else {
			DESTDIR = $${RELEASE_DIR_64}
		}
}

# Input
HEADERS += $${SRC_DIR}/ETHERNET_PROTOCOL_LIST.h \
           $${SRC_DIR}/EthRadar_Utils.h \
           $${SRC_DIR}/IP_PROTOCOL_LIST.h \
           $${SRC_DIR}/pcap.h \
           $${SRC_DIR}/ping.h \
           $${SRC_DIR}/RadarDetect.h \
           $${SRC_DIR}/RadarRecv.h \
           $${SRC_DIR}/RecThread.h \
           $${SRC_DIR}/RecvFrames.h \
           $${SRC_DIR}/wpcap_helpers.h \
           $${SRC_DIR}/include/QEthRadar/EthRadar_APi.h
SOURCES += $${SRC_DIR}/RadarDetect.cpp \
           $${SRC_DIR}/RadarRecv.cpp \
           $${SRC_DIR}/RecThread.cpp \
           $${SRC_DIR}/RecvFrames.cpp \
           $${SRC_DIR}/wpcap_helpers.cpp

#Include Path
INCLUDEPATH += $${SRC_DIR}/include \
	       $${WEYE_COMM_DIR} \
	       $${UP_DIR} \
	       $${THIS_DIR} \
	       $${WEUTILS_INCLUDE_DIR}

#Lib Path
LIBS += $${PCAP_LIB} 

 

 类似资料: