文章目录

  • 1、注释
  • 2、QT+=
  • 3、模板变量 TEMPLATE
  • 4. TARGET =
  • 5. CONFIG +=
  • 6、控制输出目录
  • 6.1、UIC_DIR += :
  • 6.2、RCC_DIR += :
  • 6.3、MOC_DIR += :
  • 6.4、OBJECTS_DIR += :
  • 6.5、DESTDIR += :
  • 7. DEPENDPATH += :
  • 8. INCLUDEPATH += :
  • 9. CODECFORSRC += :
  • 10、源代码文件目录
  • 10.1、FORMS += :
  • 10.2、 HEADERS += :
  • 10.3、SOURCES += :
  • 10.4、RESOURCES += :
  • 10.5、RC_FILE = xxx.icns
  • 11、LIBS += :
  • 12、DEFINES += :
  • 13、变量PWD
  • 14、变量OUT_PWD
  • 15. 跨平台处理信息
  • 16 pri文件


Qt之工程文件


https://www.yuque.com/youyouwoxin-adiw5/eae3th/xiqrgw

主要内容来自于网络和上面两篇链接,摘录是为了方便使用。

在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:

1、注释

从“#”开始,到这一行结束。

2、QT+=

这是添加QT项目需要的模块的,若项目中要排除某个模块,也可用QT -= 配置项。

3、模板变量 TEMPLATE

这个配置项确定qmake为这个应用程序生成哪种makefile 。有下面五种形式可供选择:

1)app : 建立一个应用程序,这个是默认值,若模块项未指定,将默认使用此项;

2)lib : 建立一个库;比如:动态库、静态库文件

3)vcapp: 建立一个应用程序的VisualStudio项目文件;

4)vclib : 建立一个库的VisualStudio项目文件;

5)subdirs : 这是一个特殊的模板,可以创建一个工程集目录

subdirs 举例:

TEMPLATE = subdirs

SUBDIRS =\
        raknet\
        onetengine \
        omisc \
        testDebugShow
 
onetengine.depends = raknet omisc
testDebugShow.depends = omisc

#CONFIG += ordered
  1. TEMPLATE=subdirs 这是固定写法,声明是做工程集目录的
  2. SUBDIRS 是指明目录中有哪些项,可以嵌套另一个subdirs型的pro
  3. 接下来可以详细定义其中的项目,如 xxx.depends=yyy,表示左边的依赖=后面的项目

相关参数:

.subdir

指定子项的目录,不使用子项本身的名字.

.file

明确指定该子项使用的pro文件,默认是根据名字自动找的,该项不和.subdir同时使用

.condition

指定要生成的子项目必须为true的bld.inf定义。仅在Symbian平台上可用。

.depends

该子项依赖指定的子项,只在使用makefiles的平台有效

.makefile

该子项的makefile,只在使用makefiles的平台有效

.target

该子项的TARGET,只在使用makefiles的平台有效

  1. 使用 subdirs =a b c d声明的其实是4个子项的名字
  2. 默认不多做说明的话,qmake 根据名字自动去找子目录,启用子目录中的pro文件(名字优先匹配).
  3. 如果有特别说明,比如: a.subdir=./z 或者 a.file=./z/z.pro 就可以不受名字限制。
  4. 至于.makefile,应该是你混用第三方库的时候才有必要手动指定使用的makefile
  5. . target 可以在子pro中指定,除非你觉得这里比较统一方便修改

4. TARGET =

这个配置项用来指定最后生成的目标应用程序的名称。名字不做修饰(不加.a/.lib/.dll)的好处是让qt帮我们加,在不同平台不用我们考虑差别.

5. CONFIG +=

用来告诉qmake关于应用程序的配置信息,使用+=表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release 其具体的意义为:

qt :告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库;warn_on :告诉qmake要将编译器设置为输出警告信息形式;release :告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug

6、控制输出目录

6.1、UIC_DIR += :

用来指定uic命令,将.ui文件转化为ui_*.h文件存放的目录。

6.2、RCC_DIR += :

用来指定rcc命令,将.qrc文件转换成qrc_*.h文件存放的目录。

6.3、MOC_DIR += :

用来指定moc命令,将含有Q_OBJECT的头文件转换成标准.h文件存放的目录。

6.4、OBJECTS_DIR += :

用来指定目标文件obj的存放目录。

6.5、DESTDIR += :

用来指定目标的生成路径。

7. DEPENDPATH += :

列出依赖项所在的路径。当处理included文件时会使用该项。

8. INCLUDEPATH += :

列出工程中 #include 项需要搜索的路径,即头文件的路径。

多个路径用空格隔开。如果路径本身包含空格,则需要用双引号引起来。

9. CODECFORSRC += :

源文件编码方式

CODECFORSRC = GBK

10、源代码文件目录

10.1、FORMS += :

用来指定工程中的ui文件。

10.2、 HEADERS += :

用来指定工程中所包含的头文件。

10.3、SOURCES += :

用来指定工程中包含的源文件。

10.4、RESOURCES += :

用来指定工程中所包含的资源文件。

10.5、RC_FILE = xxx.icns

RC_FILE = myapp.rc

IDI_ICON1 ICON “myappico.ico” windows

或者 直接使用

RC_ICONS = myappico.ico windows

或者

ICON = myapp.icns mac

11、LIBS += :

指定工程里需要链接的库文件(.lib或.dll)。根据不同的版本可以分为两种形式:

Release: LIBS += -L folder Path

//release版本引入的

lib

文件

Debug: LIBS += -L folder Path

//debug版本引入的

lib

文件

通常用Unix风格,大写的L表示“路径”,小写的l表示“库文件名字”。如

unix:LIBS += -``**L**``/usr/local/lib -``**l**``math win32:LIBS += c:/mylibs/math.lib

12、DEFINES += :

qmake添加该字段指定的全局宏定义。VS中也有类似的全局宏定义,在.dll工程中经常用到,来指定是 dllexport 还是 dllimport .

  • 屏蔽告警信息和调试输出
DEFINES +=  QT_NO_WARNING_OUTPUT\
            QT_NO_DEBUG_OUTPUT
  • 自定义宏
DEFINES += FUNDLL_LIBRARY

在头文件中使用上述宏定义:

#if defined(FUNDLL_LIBRARY)
#define FUNDLLSHARED_EXPORT __declspec(dllexport)
#else
#define FUNDLLSHARED_EXPORT __declspec(dllimport)
#endif

13、变量PWD

表示当前.pro文件所在的路径。

INCLUDEPATH += $$PWD/…/mydll

14、变量OUT_PWD

表示输出的“Makefile”所在的路径(通常在编译后生成的.exe文件的上层目录里)。

LIBS += -L$$OUT_PWD/…/funDll/ -lfunDll

15. 跨平台处理信息

跨平台处理信息也要写在.pro文件中, 其示例如下:

win32{
}
unix{
}

16 pri文件

使用pri文件可以进行工程模块化管理

  • 新工程中,新建一个xxx.pri文件,在pro文件中,include这个pri文件,

include (xxx.pri) // 使用像一个函数

pri文件并没有那么神秘,它完全可以被看作一个子 Pro 文件。就像头文件之间的包含关系一样,你可以将pri文件包含在Pro文件中,那么在Pro就可以运用到pri文件下内容了。只不过你不能在pri文件中包含Pro文件。