替换函数
qmake 在配置过程中提供处理变量内容的函数。这些函数称为 替换函数。通常,它们返回可以分配给其他变量的值。您可以通过在函数前加上 $$
运算符来获取这些值。替换函数可以分为内置函数和函数库。
另请参阅 测试函数。
内置替换函数
基本替换函数作为内置函数实现。
absolute_path(path[, base])
返回 path
的绝对路径。
如果未指定 base
,则使用当前目录作为基本目录。如果它是一个相对路径,则在使用之前将其相对于当前目录解析。
例如,以下调用返回字符串 "/home/johndoe/myproject/readme.txt"
message($$absolute_path("readme.txt", "/home/johndoe/myproject"))
This function was introduced in Qt 5.0.
另请参阅 clean_path(), relative_path().
basename(variablename)
返回 variablename
中指定的文件的基名。
例如
FILE = /etc/passwd FILENAME = $$basename(FILE) #passwd
cat(filename[, mode])
返回 filename
的内容。您可以指定以下选项用于 mode
blob
返回文件的所有内容作为一个值lines
返回每一行作为一个单独的值(没有行结束符)true
(默认值)和false
将文件内容作为单独的值返回,根据 qmake 值列表分割规则(在变量赋值中)进行分割。如果mode
是false
,则将只包含换行符的值插入到列表中,以指示文件中的换行位置。
clean_path(path)
返回经过规范化的 path
(转换到 "/"),去除冗余的目录分隔符,并尽可能解决 "." 和 ".."。此函数是围绕 QDir::cleanPath 的包装。
This function was introduced in Qt 5.0.
另请参阅 absolute_path(), relative_path(), shell_path(), system_path().
dirname(file)
返回指定文件的目录名部分。例如
FILE = /etc/X11R6/XF86Config DIRNAME = $$dirname(FILE) #/etc/X11R6
enumerate_vars
返回所有定义的变量名称的列表。
This function was introduced in Qt 5.0.
escape_expand(arg1 [, arg2 ..., argn])
接受任意数量的参数。它会扩展每个参数的转义序列 \n
,\r
,\t
,并返回一个包含参数列表。
注意:如果您指定字符串直接展开,则需要转义反斜杠,如下所示代码片段所示。
message("First line$$escape_expand(\\n)Second line")
find(variablename, substr)
返回所有与正则表达式 substr
匹配的 variablename
中的值。
MY_VAR = one two three four MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)
MY_VAR2 将包含 '-Lone -Ltwo -Lthree -Lfour -Lfive',而 MY_VAR3 将包含 'three two three'。
files(pattern[, recursive=false])
展开指定的通配符模式,并返回文件名列表。如果 recursive
为 true,函数将进入子目录。
first(variablename)
返回 variablename
的第一个值。
例如,以下调用返回 firstname
CONTACT = firstname middlename surname phone message($$first(CONTACT))
另请参阅 take_first(),last()。
format_number(number[, options...])
以由 options
指定的格式返回 number
。您可以指定以下选项
ibase=n
将输入的基数设置为n
obase=n
将输出的基数设置为n
width=n
将输出的最小宽度设置为n
。如果输出短于width
,则用空格填充zeropad
用零而不是空格填充输出padsign
在输出的正数前加空格alwayssign
在输出的正数前加加号leftalign
将填充放置在输出值的右侧
目前不支持浮点数。
例如,以下调用将十六进制数 BAD
转换为 002989
message($$format_number(BAD, ibase=16 width=6 zeropad))
This function was introduced in Qt 5.0.
fromfile(filename, variablename)
将 filename
计算为 qmake 项目文件,并返回分配给 variablename
的值。
另请参阅 infile()。
getenv(variablename)
返回环境变量 variablename
的值。这基本上等同于 $$(variablename)
语法。但是,getenv
函数支持名称中包含括号的名为环境的变量。
此函数在 Qt 5.12 中引入。
join(variablename, glue, before, after)
使用 glue
连接 variablename
的值。如果此值不为空,此函数将 before
前缀添加到值中,并使用 after
后缀。variablename
是唯一必要的字段,其余默认为空字符串。如果需要在 glue
、before
或 after
中编码空格,必须引用它们。
last(variablename)
返回 variablename
的最后一个值。
例如,以下调用将返回 phone
CONTACT = firstname middlename surname phone message($$last(CONTACT))
另请参阅 take_last(),first()。
list(arg1 [, arg2 ..., argn])
接受任意数量的参数。它创建一个具有唯一名称的变量,其中包含参数的列表,并返回该变量的名称。您可以使用该变量写入循环,如下面的代码片段所示
for(var, $$list(foo bar baz)) { ... }
而不是
values = foo bar baz for(var, values) { ... }
lower(arg1 [, arg2 ..., argn])
接受任意数量的参数,并将它们转换为小写。
另请参阅 upper()。
member(variablename [, start [, end]])
返回 variablename
的列表值的切片,其中包含从 start
到 end
(包含)的基于零的元素索引。
如果未提供 start
,则默认为零。这种用法等同于 $$first(variablename)
。
如果未提供 end
,则默认为 start
。这种用法表示简单的数组索引,因为将返回一个元素。
也可以在单个参数中指定起始和结束,数字之间用两个点分隔。
负数表示从列表末尾开始的索引,-1 是最后一个元素。
如果任一索引超出范围,将返回空列表。
如果 end
小于 start
,则按相反顺序返回元素。
注意:由于末尾索引是包含的且无序,因此只有当索引无效时(由输入变量为空暗示)才返回空列表。
另请参阅 str_member()。
num_add(arg1 [, arg2 ..., argn])
接受任意数量的数字参数并将它们相加,返回总和。
减法由将减号前缀到数字值来隐式支持以进行取反。
sum = $$num_add($$first, -$$second)
如果操作数可能已经是负数的,则需要进行另一个步骤来规范化数字。
second_neg = -$$second second_neg ~= s/^--// sum = $$num_add($$first, $$second_neg)
此函数自 Qt 5.8 起引入。
prompt(question [, decorate])
显示指定的 question
,并返回从 stdin 读取的值。
如果 decorate
为 true(默认值),则问题获得一个通用的前缀和后缀,以标识它是提示。
quote(string)
将整个 string
转换为一个单一实体并返回结果。这仅是将字符串放在双引号中的花哨方法。
re_escape(string)
返回每个特殊正则表达式字符都转义了反斜杠的 string
。该函数是 QRegularExpression::escape 的包装器。
read_registry(tree, key[, flag])
返回树 tree
内的注册表键 key
的值。
仅支持树 HKEY_CURRENT_USER
(HKCU
)和 HKEY_LOCAL_MACHINE
(HKLM
)。
flag
可能是 WOW64_32KEY
(32
)或 WOW64_64KEY
(64
)。
注意:此函数仅在 Windows 主机上可用。
此函数自 Qt 5.12.1 起引入。
relative_path(filePath[, base])
返回相对于base
的filePath
路径。
如果未指定base
,则默认为当前项目目录。如果它是相对路径,则在使用之前将其相对于当前项目目录解析。
如果filePath
是相对路径,则首先将其解析到基本目录;在这种情况下,此函数实际上充当$$clean_path()的作用。
This function was introduced in Qt 5.0.
另请参阅absolute_path()、clean_path()。
replace(string, old_string, new_string)
在由string
提供的变量的内容中,将每个old_string
的实例替换为new_string
。例如,以下代码将打印消息
MESSAGE = This is a tent. message($$replace(MESSAGE, tent, test))
prints the message
This is a test.
resolve_depends(variablename, prefix)
这是一个通常不需要的内部函数。
This function was introduced in Qt 5.0.
reverse(variablename)
以反向顺序返回variablename
的值。
This function was introduced in Qt 5.0.
section(variablename, separator, begin, end)
返回variablename
值的某一部分。该函数是QString::section的包装器。
例如,以下调用的输出为surname
CONTACT = firstname:middlename:surname:phone message($$section(CONTACT, :, 2, 2))
shadowed(path)
将项目源目录中的路径映射到构建目录。如果为源内构建,则此函数返回path
。如果path
指向源树外部,则返回空字符串。
This function was introduced in Qt 5.0.
shell_path(path)
将path
内的所有目录分隔符转换为在构建项目时使用的shell兼容的分隔符(即由make工具调用的shell)。例如,当使用Windows shell时,将斜杠转换为反斜杠。
This function was introduced in Qt 5.0.
另请参阅system_path()。
shell_quote(arg)
为在构建项目时使用的shell引号arg
。
This function was introduced in Qt 5.0.
另请参阅system_quote()。
size(variablename)
返回variablename
值的数量。
另请参阅str_size()。
sort_depends(variablename, prefix)
这是一个通常不需要的内部函数。
This function was introduced in Qt 5.0.
sorted(variablename)
返回以升序ASCII顺序排序的variablename
值列表。
可以将数值排序通过使用format_number()函数,将值以固定长度零填充来实现。
此函数自 Qt 5.8 起引入。
split(variablename, separator)
将variablename
的值拆分为独立的值,并以列表形式返回它们。该函数是QString::split的包装器。
例如
CONTACT = firstname:middlename:surname:phone message($$split(CONTACT, :))
sprintf(string, arguments...)
将string
中的%1-%9替换为以逗号分隔的函数arguments
列表中传入的参数,并返回处理后的字符串。
str_member(arg [, start [, end]])
此函数与member()相同,但它在字符串值上操作而不是列表变量,因此索引指的是字符位置。
此函数可用于实现许多常见的字符串切片操作。
# $$left(VAR, len) left = $$str_member(VAR, 0, $$num_add($$len, -1)) # $$right(VAR, len) right = $$str_member(VAR, -$$num, -1) # $$mid(VAR, off, len) mid = $$str_member(VAR, $$off, $$num_add($$off, $$len, -1)) # $$mid(VAR, off) mid = $$str_member(VAR, $$off, -1) # $$reverse(VAR) reverse = $$str_member(VAR, -1, 0)
注意:在这些实现中,需要单独处理零长度的len
参数。
此函数自 Qt 5.8 起引入。
str_size(arg)
返回参数中的字符数量。
另请参阅size()。
此函数自 Qt 5.8 起引入。
system(command[, mode[, stsvar]])
可以使用此版本的system
函数从命令获取stdout并将其分配给变量。
例如
UNAME = $$system(uname -s) contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )
类似于$$cat(),mode参数接受blob
、lines
、true
和false
作为值。但是,与传统的单词拆分规则(即空或true
和false
)相比,略有不同。
如果您传递stsvar
,命令的退出状态将存储在该变量中。如果命令崩溃,状态将是-1,否则是命令选择的非负退出代码。通常,比较状态与零(成功)就足够了。
另请参阅system()的测试变体。
system_path(path)
将path
中的所有目录分隔符转换为与system()
函数调用的shell兼容的分隔符。例如,对于Windows shell,斜杠将被转换为反斜杠。
This function was introduced in Qt 5.0.
另请参阅shell_path()。
system_quote(arg)
为system
函数使用的shell引号arg
。
This function was introduced in Qt 5.0.
另请参阅shell_quote()。
take_first(variablename)
返回variablename
的第一个值并从源变量中删除它。
这为实现队列等提供了便利。
此函数自 Qt 5.8 起引入。
另请参阅 take_last(),first()。
take_last(variablename)
返回variablename
的最后一个值并从源变量中删除它。
这为例如实现栈等提供了便利。
此函数自 Qt 5.8 起引入。
另请参阅 take_first(),last()。
unique(variablename)
返回含有重复项删除的variablename
值列表。例如
ARGS = 1 2 3 2 5 1 ARGS = $$unique(ARGS) #1 2 3 5
upper(arg1 [, arg2 ..., argn])
接受任意数量的参数并将它们转换为 uppercase。
另请参阅lower()。
val_escape(variablename)
以能够将它们解析为qmake代码的方式转换variablename
的值。
This function was introduced in Qt 5.0.
© 2024 Qt公司有限公司。此处包含的文档贡献均为其各自所有者的版权。提供的文档根据自由软件基金会的发布,在GNU自由文档许可证1.3版本的条款进行许可。Qt及其相关标志是芬兰以及全球其他地区的Qt公司及其商标。所有其他商标均属于其各自所有者。