ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt之工程文件

2021-06-09 21:58:56  阅读:251  来源: 互联网

标签:文件 Qt 工程 pro pri 指定 qmake DIR


文章目录

Qt之工程文件

https://blog.csdn.net/adriano119/article/details/5878169

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文件。

标签:文件,Qt,工程,pro,pri,指定,qmake,DIR
来源: https://blog.csdn.net/hitzsf/article/details/117755153

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有