替换函数

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 值列表分割规则(在变量赋值中)进行分割。如果 modefalse,则将只包含换行符的值插入到列表中,以指示文件中的换行位置。

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 是唯一必要的字段,其余默认为空字符串。如果需要在 gluebeforeafter 中编码空格,必须引用它们。

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 的列表值的切片,其中包含从 startend(包含)的基于零的元素索引。

如果未提供 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 读取的值。

如果 decoratetrue(默认值),则问题获得一个通用的前缀和后缀,以标识它是提示。

quote(string)

将整个 string 转换为一个单一实体并返回结果。这仅是将字符串放在双引号中的花哨方法。

re_escape(string)

返回每个特殊正则表达式字符都转义了反斜杠的 string。该函数是 QRegularExpression::escape 的包装器。

read_registry(tree, key[, flag])

返回树 tree 内的注册表键 key 的值。

仅支持树 HKEY_CURRENT_USERHKCU)和 HKEY_LOCAL_MACHINEHKLM)。

flag 可能是 WOW64_32KEY32)或 WOW64_64KEY64)。

注意:此函数仅在 Windows 主机上可用。

此函数自 Qt 5.12.1 起引入。

relative_path(filePath[, base])

返回相对于basefilePath路径。

如果未指定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参数。

另请参阅member()num_add()

此函数自 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参数接受bloblinestruefalse作为值。但是,与传统的单词拆分规则(即空或truefalse)相比,略有不同。

如果您传递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公司及其商标。所有其他商标均属于其各自所有者。