一、操作符
以下部分描述了如何使用运算符来操作变量的内容。
赋值
= 运算符为变量赋值:
TARGET = myapp
讯享网
附加值
+= 运算符将一个新值附加到变量中的值列表:
讯享网 DEFINES += USE_MY_STUFF
删除值
-= 运算符从变量的值列表中删除一个值:
DEFINES -= USE_MY_STUFF
添加唯一值
*= 运算符将一个值添加到变量中的值列表中。这可以防止值在变量中多次包含。 例如:
讯享网 DEFINES *= USE_MY_STUFF
替换值
~= 运算符将与正则表达式匹配的任何值替换为指定值:
DEFINES ~= s/QT_[DT].+/QT
列表中以 QT_D 或 QT_T 开头的任何值都将替换为 QT。
可变扩展
$$ 运算符用于提取变量的内容,并可用于在变量之间传递值或将它们提供给函数:
讯享网 EVERYTHING = $$SOURCES $$HEADERS message("该项目包含以下文件:") message($$EVERYTHING)
变量可用于存储环境变量的内容。
要在 qmake 运行时获取环境值的内容,请使用 $$(...) 运算符:
DESTDIR = $$(PWD) message(该项目将安装在:$$DESTDIR)
PWD环境变量的值是在处理工程文件时读取的。要在处理生成的 Makefile 时获取环境值的内容,请使用 $(...) 运算符:
讯享网 DESTDIR = $(PWD) message(处理 Makefile 时,该项目将安装在:$$DESTDIR)
访问 qmake 属性
特殊的 $$[...] 运算符可用于访问 qmake 属性:
message(Qt 版本:$$[QT_VERSION]) message(Qt安装在:$$[QT_INSTALL_PREFIX]) message(Qt资源可以在以下位置找到:) message(文档:$$[QT_INSTALL_DOCS]) message(头文件:$$[QT_INSTALL_HEADERS]) message(库:$$[QT_INSTALL_LIBS]) message(二进制文件(可执行文件):$$[QT_INSTALL_BINS]) message(插件:$$[QT_INSTALL_PLUGINS]) message(数据文件:$$[QT_INSTALL_DATA]) message(翻译文件:$$[QT_INSTALL_TRANSLATIONS]) message(设置:$$[QT_INSTALL_CONFIGURATION]) message(示例:$$[QT_INSTALL_EXAMPLES])
此运算符可访问的属性通常用于使第三方插件和组件能够集成到 Qt 中。例如,如果在其项目文件中进行以下声明,则 Qt Designer 插件可以与 Qt Designer 的内置插件一起安装:
讯享网 target.path = $$[QT_INSTALL_PLUGINS]/designer INSTALLS += target
二、作用域
作用域类似于过程编程语言中的 if 语句。如果某个条件为true,则处理范围内的声明。
作用域语法
作用域包括一个条件,后跟同一行上的左大括号、一系列命令和定义,以及新行上的右大括号:
<condition> { <command or definition> ... }
左大括号必须与条件写在同一行。如以下部分所述,范围可以串联以包含多个条件。
作用域和条件
作用域被写成一个条件,后跟包含在一对大括号内的一系列声明。例如:
讯享网 win32 { SOURCES += paintwidget_win.cpp }
也可以否定给定作用域中使用的条件,以提供一组替代声明,仅当原始条件为假时才会处理这些声明。例如:
!win32 { SOURCES -= paintwidget_win.cpp }
作用域可以嵌套以组合多个条件。例如:
讯享网 macx { CONFIG(debug, debug|release) { HEADERS += debugging.h } }
上面例子等同于:
macx:CONFIG(debug, debug|release) { HEADERS += debugging.h }
还可以使用运算符来执行单行条件赋值。 例如:
讯享网 win32:DEFINES += USE_MY_STUFF
: 运算符:逻辑 AND 运算符,将许多条件连接在一起,并要求所有条件都为真。
| 运算符:逻辑 OR 运算符,将多个条件连接在一起,并且只需要其中一个为真。
win32|macx { HEADERS += debugging.h }
还可以使用 else 作用域为作用域内的声明提供替代声明。如果前面作用域的条件为假,则处理每个 else 作用域。例如:
讯享网 win32:xml { message(在Windows上构建) SOURCES += xmlhandler_win.cpp } else:xml { SOURCES += xmlhandler.cpp } else { message(未知配置) }
配置和作用域
存储在 CONFIG 变量中的值由 qmake 特别处理。每个可能的值都可以用作作用域的条件。 例如,CONFIG 保存的值列表可以用 opengl 值扩展:
CONFIG += opengl
可以使用这个特性给最终的可执行文件一个合适的名字:
讯享网 opengl { TARGET = application-gl } else { TARGET = application }
由于可以将自定义的值放在 CONFIG 行上,这提供了一种自定义项目文件和微调生成的 Makefile 的便捷方法。
平台作用域值
可以使用作用域测试各种其他内置平台和特定于编译器的值。这些基于 Qt 的 mkspecs 目录中提供的平台规范。 例如,项目文件中的以下几行显示了 linux-g++ 规范的当前使用和测试规范:
message($$QMAKESPEC) linux-g++ { message(Linux) }

三、变量
项目文件中使用的很多变量都是qmake在生成Makefile时使用的特殊变量,比如 DEFINES、SOURCES、HEADERS。 此外,可以创建自己使用的变量。 当 qmake 遇到对该名称的赋值时,它会创建具有给定名称的新变量。 例如:
讯享网 MY_VARIABLE = value
自定义的变量所做的事情没有限制,因为 qmake 将忽略它们,除非它在处理范围时需要评估它们。
还可以通过在变量名称前添加 $$ 前缀来将当前变量的值分配给另一个变量。 例如:
MY_DEFINES = $$DEFINES #或 MY_DEFINES = $${DEFINES}
现在 MY_DEFINES 变量包含项目文件中此时 DEFINES 变量中的内容。
四、函数
qmake 提供了一系列内置函数来允许处理变量的内容。这些函数处理提供给它们的参数并作为结果返回一个值或值列表。 要将结果分配给变量,请在此类函数中使用 $$ 运算符,就像将一个变量的内容分配给另一个变量一样:
讯享网 HEADERS = model.h HEADERS += $$OTHER_HEADERS HEADERS = $$unique(HEADERS)
您可以定义自己的函数来处理变量的内容,如下所示:
defineReplace(functionName){ #function code }
以下示例函数将变量名称作为其唯一参数,使用 eval() 内置函数从变量中提取值列表,并编译文件列表:
讯享网 defineReplace(headersAndSources) { variable = $$1 names = $$eval($$variable) headers = sources = for(name, names) { header = $${name}.h exists($$header) { headers += $$header } source = $${name}.cpp exists($$source) { sources += $$source } } return($$headers $$sources) }
五、测试函数
qmake 提供了可在编写作用域时用作条件的内置函数。这些函数不返回值,而是指示成功或失败:
count(options, 2) { message(指定发布和调试) }
这种类型的函数应该只在条件表达式中使用。
可以定义自己的函数来为作用域提供条件。以下示例测试列表中的每个文件是否存在,如果它们都存在则返回 true,否则返回 false:
讯享网 defineTest(allFiles) { files = $$ARGS for(file, files) { !exists($$file) { return(false) } } return(true) }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/14515.html