深入理解Qt的.pro文件

时间:2025-02-10 06:58:54

  • 深入理解Qt的pro文件
    • 模板变量
    • 生成目录
    • 生成的应用程序名
    • 编译选项
    • 目标文件目录
    • 包含头文件
    • 包含源文件
    • 包含资源文件
    • 附加头文件包含
    • 链接库
    • 预编译宏
    • 平台相关性处理
    • 指定来自ui文件位置
    • 指定界面翻译文本列表
    • 指定图标

深入理解Qt的.pro文件

一般Qt项目我们是使用Qt Creator自动生成的,如果是没有.pro的项目,可以使用qmake project来生成。

在一般的.pro里已经包含了几个基本的选项,如TEMPLATE,TARGET,INCLUDEPATH,HEADS,SOURCES等选项,下面我们细讲。

模板变量

TEMPLATE = app
  • app 表示该工程建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用
  • lib 表示该工程建立一个库的makefile

生成目录

指定生成的可执行程序的目录,可以绝对路径和相对路径。

DESTDIR += ../bin

生成的应用程序名

程序名即软件名称

TARGET = 3DAOI

编译选项

增添后者移除某个模块。

例如增添c++11和console模块的支持,Qt的各模块也在这里添加

CONFIG += console c++11 network
CONFIG -= qt

可以用空格分隔或者“\”来隔行。

如果是一些比较特殊的Qt模块需要使用用以下方式加载:

QT += qml quick
QT += quick quickcontrols2

目标文件目录

obj文件存放的目录,也就是.o文件的生成路径,可以绝对路径或者相对路径。

OBJECTS_DIR += ../tmp

补充
- MOC_DIR 指定moc文件生成路径
- UI_DIR 指定ui文件生成路径

包含头文件

表示本项目中头文件。

HEADERS += \
libcurl/curl/\
libcurl/curl/

只要Qt Creator目录树中add进去了就会自动追加到.pro文件中。

包含源文件

表示本项目中的源文件

SOURCES += main.cpp\
json.cpp

只要Qt Creator目录树里add进去了就会自动追加到.pro文件中。

包含资源文件

表示本项目包含的资源文件。

RESOURCES += qrc/

qrc文件格式类似如下:

<RCC>
    <qresource prefix="/">
        <file>Chapter1/0_hello.qml</file>
        <file>Chapter1/1_object_expression.qml</file>
    </qresource>
</RCC>

只要Qt Creator目录树里add进去了就会自定追加,更改.pro文件会同步更新Qt Creator里的目录树,但不会影响硬盘上的自愿文件。

附加头文件包含

一般要编译链接第三方库时配置include目录。
例如

INCLUDEPATH += ./boost/include\
src/thirdpart/include

INCLUDEPATH += D:/boost/include\
E:/cocos2dx/include

注意

  • 可以用绝对路径或相对路径
  • 相对路径中./可以省略
  • 路径中不允许出现空格

链接库

对于静态库(.a)以及动态库(.so)。

LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/-llibcurl\
-LD:/codetest/libcurlcpp/libcurl/lib/-lws2_32\
-LD:/codetest/libcurlcpp/libcurl/lib/-lwldap32\
-LD:/codetest/libcurlcpp/libcurl/lib/-lopencv.so\
-LD:/codetest/libcurlcpp/libcurl/lib/-llibzmq.a

或者:

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\
D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\
D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib
D:/codetest/libcurlcpp/libcurl/lib/opencv.so\
D:/codetest/libcurlcpp/libcurl/lib/opencv.a

再或者:

LIBS += $$PWD/libcurl/lib/libcurl.lib\
$$PWD/libcurl/lib/ws2_32.lib\
$$PWD/libcurl/lib/wldap32.lib
  1. 可以用-L指定目录,-l指定库的名称(无需后缀,.lib, .a,.so都适用),注意-l后面没有空格
  2. 可以直接通过绝对路径和相对路径指定库的完成path(需后缀, .lib, .a, .so都试用), 相对路径用$$PWD前缀,路径不允许有空格。
  3. LIBS += somepath这个可以写多行,也可以使用”\”隔行

注意:
对于动态库dll文件,必须拷贝到exe执行目录或者在环境变量里配置路径才可以。

预编译宏

DEFINES += USE_OPENSSL\
CURL_STATICLIB

类似于vs里面在工程里设置预编译选项 ,这个使用时自行google。

平台相关性处理

根据qmake所运行的平台来使用相应的作用域来进行处理。

win32
{
SOURCES += 1.cpp
}else{
SOURCES += 2.cpp
}

根据平台进行条件编译。

指定来自ui文件位置

这个我们不需要。

unix:UI_DIR = ../project/ui
win32:UI_DIR = D:/project/ui

指定界面翻译文本列表

翻译用户界面时需要用到。

TRANSLATIONS += Resource/myapp_zh.ts \
                Resource/myapp_en.ts

指定图标

如果RC_FILE 和RES_FILE变量都没有设置这才可利用

RC_ICONS =