Qt工程.pro文件变量解析
Qt工程的管理文件为*.pro
,Qt Creator会先解析这个文件,如果解析有错误,会显示空工程。
编译Qt工程时,qmake会先将*.pro
文件解析生成Makefile,然后调用编译器进行编译。
本文介绍*.pro
文件中会用到的一些变量。
qmake命令
1 |
|
会把本目录及其子目录内所有.cpp .h 文件加入到项目输入文件 pro 文件中,使用是注意移去其他无用的文件。
#xxx
注释, 从“#”开始,到这一行结束
SOURCES
源文件
模式1
1 |
|
模式2
1 |
|
模式3
1 |
|
模式4
1 |
|
HEADERS
头文件
模式1
1 |
|
模式2
1 |
|
TEMPLATE
当前工程所使用的模板
1 |
|
- app(建立一个应用程序的 makefile。这是默认值,所以如果模板没有被指定,这个将被使用。)
- subdirs(这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile 并且为它调用 make 的 makefile)
- lib(建立一个库的 makefile)
- vcapp ‐ 建立一个应用程序的 Visual Studio 项目文件。
- vclib ‐ 建立一个库的 Visual Studio 项目文件。
CONFIG
模式
1 |
|
配置信息
- release 应用程序将以 release 模式连编。如果“debug”被指定,它将被忽略。
- debug 应用程序将以 debug 模式连编。
- warn_on 编译器会输出尽可能多的警告信息。如果“warn_off” 被指定,它将被忽略。
- warn_off 编译器会输出尽可能少的警告信息。
连编的库/应用程序的类型
- qt 应用程序是一个 Qt 应用程序,并且 Qt 库将会被连接。
- thread 应用程序是一个多线程应用程序。
- x11 应用程序是一个 X11 应用程序或库。
- windows 只用于“app”模板:应用程序是一个 Windows 下的窗口应用程序。
- console 只用于“app”模板:应用程序是一个 Windows 下的控制台应用程序。
- dll 只用于“lib”模板:库是一个共享库(dll)。
- staticlib 只用于“lib”模板:库是一个静态库。
- plugin 只用于“lib”模板:库是一个插件,这将会使 dll 选项生效。
TARGET
模式
1 |
|
指定目标文件名 - 如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称
INCLUDEPATH
用例
1 |
|
头文件包含路径
DEPENDPATH
程序编译时依赖的相关路径
用例
1 |
|
VPATH
寻找补充文件的搜索路径。
QT
加入库模块
用例
1 |
|
LIBS
设置本工程需要的库位置和库文件
用例
1 |
|
INTERFACES / FORMS
工程中包含的.ui 设计文件
用例
1 |
|
1 |
|
DESTDIR
指定生成的应用程序放置的目录
用例
1 |
|
UI_DIR / RCC_DIR / MOC_DIR / OBJECTS_DIR
- 指定 uic 命令将.ui 文件转化成 ui_*.h 文件的存放的目录
- 指定 rcc 命令将.qrc 文件转换成 qrc_*.h 文件的存放目录
- 指定 moc 命令将含 Q_OBJECT 的头文件转换成标准 *.h 文件的存放目录
- 指定目标文件的存放目录
用例
1 |
|
DEF_FILE / RC_FILE / RES_FILE
只有 Windows 需要
- 应用程序所要连接的.def 文件。
- 应用程序的资源文件。
- 应用程序所要连接的资源文件。
LEXSOURCES / YACCSOURCES
- 应用程序中的所有 lex 源文件的列表。
- 应用程序中的所有 yacc 源文件的列表。
RESOURCES
工程中包含的资源文件
用例
1 |
|
CODECFORSRC
源文件编码方式
1 |
|
LANGUAGE
1 |
|
操作符
平台相关性处理
用例
1 |
|
局部变量
1 |
|
变量到目前为止我们遇到的变量都是系统变量,比如 DEFINES、SOURCES 和 HEADERS。
你也可以为你自己创建自己的变量,这样你就可以在作用域中使用它们了。创建自己的变量很容易,只要命名它并且分配一些东西给它。比如:
1 |
|
你也可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:
1 |
|
第二种方法允许你把一个变量和其它变量连接起来,而不用使用空格。qmake 将允许一个变量包含任何东西(包括$(VALUE)
,可以直接在 makefile 中直接放置,并且允许它适当地扩张,通常是一个环境变量)。无论如何,如果你需要立即设置一个环境变量,然后你就可以使用$$()
方法。比如:
1 |
|
这将会设置 MY_DEFINES 为环境变量 ENV_DEFINES 传递给*.pro
文件的值。
= / += / *= / ~= 操作符
- 分配一个值给一个变量
- 向一个变量的值的列表中添加一个值
- 从一个变量的值的列表中移去一个值,表示不支持
- 仅仅在一个值不存在于一个变量的值的列表中的时候,把它添加进去
- 替换任何与指定的值的正则表达式匹配的任何值
用例
1 |
|
内置函数
- join( variablename, glue, before, after) 这将会在 variablename 的各个值中间加入 glue。如果这个变量的值为非空,那么就会在值的前面加一个前缀 before 和一个后缀 after。只有 variablename 是必须的字段,其它默认情况下为空串。如果你需要在 glue、before 或者 after 中使用空格的话,你必须提供它们。
- member( variablename, position ) 这将会放置 variablename 的列表中的 position 位置的值。如果 variablename 不够长,这将会返回一个空串。variablename 是唯一必须的字段,如果没有指定位置,则默认为列表中的第一个值。
- find( variablename, substr ) 这将会放置 variablename 中所有匹配 substr 的值。substr 也可以是正则表达式,而因此将被匹配。
1 |
|
- system( program_and_args ) 这将会返回程序执行在标准输出/标准错误输出的内容,并且正像平时所期待地分析它。比如你可以使用这个来询问有关平台的信息。
1 |
|
测试函数
- contains( variablename, value ) 如果 value 存在于一个被叫做 variablename 的变量的值的列表中,那么这个作用域中的设置将会被处理。例如:
1 |
|
- count( variablename, number ) 如果 number 与一个被叫做 variablename 的变量的值的数量一致,那么这个作用域中的设置将会被处理。例如:
1 |
|
- error( string ) 这个函数输出所给定的字符串,然后会使 qmake 退出。例如:
1 |
|
- exists( filename ) 如果指定文件存在,那么这个作用域中的设置将会被处理。例如:
1 |
|
- !exists(filename) 如果一个文件不存在,停止 qmake。用例:
1 |
|
- include( filename ) 项目文件在这一点时包含这个文件名的内容,所以指定文件中的任何设置都将会被处理。例如:
1 |
|
- isEmpty( variablename ) 这和使用 count( variablename, 0 )是一样的。如果叫做 variablename 的变量没有任何元素,那么这个作用域中的设置将会被处理。例如:
1 |
|
- message( string ) 这个函数只是简单地在控制台上输出消息。
1 |
|
- system( command ) 特定指令被执行并且如果它返回一个 1 的退出值,那么这个作用域中的设置将会被处理。例如:
1 |
|
- infile( filename, var, val ) 如果 filename 文件(当它被 qmake 自己解析时)包含一个值为 val 的变量 var,那么这个函数将会返回成功。你也可以不传递第三个参数(val),这时函数将只测试文件中是否分配有这样一个变量 var。
项目
目标:为一个库文件
1 |
|