这是 pmake 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
制造商 — 维护程序依赖
概要
制造商 [-BeikNnqrstWwX[-C 目录[-D 变量[-d 标志[-f 生成文件[-I 目录]
[-J 私立[-j 最大工作[-m 目录[-T 文件[-V 变量[变量=值]
[目标 ...]
商品描述
制造商 是一个旨在简化其他程序维护的程序。 它的输入是一个
有关程序和其他文件所依赖的文件的规范列表。 如果不 -f
生成文件 给出了 makefile 选项, 制造商 将尝试打开 '生成文件' 然后 '生成文件'in
为了找到规格。 如果文件 '。依靠' 存在,它被读取(见 MKDEP(1))。
本手册页仅供参考。 更详尽的描述
of 制造商 和makefile,请参考 制造商 - A 教程 .
制造商 将预先添加的内容 标志 命令行环境变量
解析它们之前的参数。
选项如下:
-B 尝试通过为每个命令执行一个 shell 并通过以下方式向后兼容
执行命令以按顺序制作依赖行的来源。
-C 目录
改成 目录 在阅读 makefile 或做任何其他事情之前。 如果
多 -C 指定了选项,每个选项都相对于前一个进行解释:
-C / -C 等。 相当于 -C /等.
-D 变量
确定 变量 在全局范围内为 1。
-d [-]标志
打开调试,并指定哪些部分 制造商 是打印调试
信息。 除非标志前面有“-”,否则它们将被添加到 标志
环境变量,将由任何子 make 进程处理。 默认情况下,
调试信息打印到标准错误,但这可以使用
此 F 调试标志。 调试输出总是无缓冲的; 此外,如果
调试已启用但调试输出未定向到标准输出,然后
标准输出是行缓冲的。 旗 是以下一项或多项:
A 打印所有可能的调试信息; 相当于指定所有
调试标志。
a 打印有关存档搜索和缓存的调试信息。
C 打印有关当前工作目录的调试信息。
c 打印有关条件评估的调试信息。
d 打印有关目录搜索和缓存的调试信息。
e 打印有关失败命令和目标的调试信息。
F[+]文件名
指定写入调试输出的位置。 这一定是最后一面旗帜,
因为它消耗了参数的其余部分。 如果性格
'F' 标志是 '+' 之后,文件将被打开
追加模式; 否则文件将被覆盖。 如果文件名是
'stdout' 或 'stderr' 然后调试输出将写入标准
分别输出或标准错误输出文件描述符(和“+”
选项无效)。 否则,输出将被写入命名的
文件。 如果文件名以 '.%d' 结尾,则 '%d' 将被 pid 替换。
f 打印有关循环评估的调试信息。
g1 在做任何事情之前打印输入图。
g2 在完成所有操作后或在出错退出之前打印输入图。
g3 在出错退出之前打印输入图。
j 打印有关运行多个 shell 的调试信息。
l 在 Makefile 中打印命令,无论它们是否带有前缀
通过 '@' 或其他“安静”标志。 也称为“大声”行为。
M 打印有关目标的“元”模式决策的调试信息。
m 打印有关制作目标的调试信息,包括修改
日期。
n 不要删除运行命令时创建的临时命令脚本。
这些临时脚本是在引用的目录中创建的
TMPDIR 环境变量,或在 / tmp目录 如果 TMPDIR 未设置或设置为
空字符串。 临时脚本由 马克斯坦普(3),并有
表格名称 制作XXXXXX. 注意: 这可以在 TMPDIR 或
/ tmp目录,请谨慎使用。
p 打印有关 makefile 解析的调试信息。
s 打印关于后缀转换规则的调试信息。
t 打印有关目标列表维护的调试信息。
V 强制 -V 打印变量原始值的选项。
v 打印有关变量赋值的调试信息。
x 运行 shell 命令 -x 所以实际的命令按原样打印
被执行。
-e 指定环境变量覆盖 makefile 中的宏分配。
-f 生成文件
指定要读取的 makefile 而不是默认的 '生成文件'。 如果 生成文件 是'-',
读取标准输入。 可以指定多个 makefile,并在
指定的顺序。
-I 目录
指定在其中搜索生成文件和包含的生成文件的目录。 这
系统 makefile 目录(或目录,请参阅 -m 选项)是自动的
包含在此列表中。
-i 忽略 makefile 中 shell 命令的非零退出。 相当于指定
“-' 在 makefile 中的每个命令行之前。
-J 私立
这个选项应该 而不去 由用户指定。
当。。。的时候 j 选项在递归构建中使用,此选项由 make 传递给
child make 允许构建中的所有 make 进程协作以避免
使系统过载。
-j 最大工作
指定最大作业数 制造商 可能在任何时候运行。 这
值保存在 .创造就业机会. 关闭兼容模式,除非 B 标志是
还规定。 当兼容模式关闭时,所有与
目标在单个 shell 调用中执行,而不是传统的
每行 shell 调用。 这可以打破改变的传统脚本
每个命令调用上的目录,然后期望以一个新的开始
下一行的环境。 更正脚本更有效
而不是打开向后兼容性。
-k 遇到错误后继续处理,但仅限于那些发生错误的目标
不依赖于其创建导致错误的目标。
-m 目录
指定一个目录,在其中搜索 sys.mk 和通过
⟨文件⟩ 风格的包含语句。 这 -m 选项可以多次使用以形成一个
搜索路径。 此路径将覆盖默认系统包含路径:
/usr/share/mk. 此外,系统包含路径将附加到搜索中
用于“的路径文件"-style include 语句(请参阅 -I 选项)。
如果文件名或目录名在 -m 参数(或 MAKESYSPATH 环境
变量)以字符串“.../”开头,然后 制造商 将搜索指定的
在参数字符串的剩余部分中命名的文件或目录。 搜索
从 Makefile 的当前目录开始,然后向上工作
文件系统的根目录。 如果搜索成功,则结果目录
替换“.../”规范中的 -m 争论。 如果使用,此功能允许
制造商 在当前的源代码树中轻松搜索自定义的 sys.mk 文件(例如,
通过使用“.../mk/sys.mk”作为参数)。
-n 显示本应执行但不实际执行的命令
除非目标依赖于 .MAKE 特殊源(见下文)。
-N 显示本来会执行的命令,但实际上不执行任何命令
其中; 用于调试顶级 makefile 而无需下降到
子目录。
-q 不执行任何命令,但如果指定的目标是最新的,则退出 0
1,否则。
-r 不要使用系统生成文件中指定的内置规则。
-s 执行时不要回显任何命令。 相当于指定 '@' 前
makefile 中的每个命令行。
-T 跟踪文件
当与 -j 标记,将跟踪记录附加到 跟踪文件 对于每个开始的工作
并完成。
-t 与其重新构建在 makefile 中指定的目标,不如创建或更新
其修改时间以使其看起来是最新的。
-V 变量
打印 制造商的价值观念 变量,在全球范围内。 不建
任何目标。 可以指定此选项的多个实例; 变量将
每行打印一个,每个空或未定义的变量都有一个空行。 如果
变量 包含 '$' 则该值将在打印前扩展。
-W 将 makefile 解析期间的任何警告视为错误。
-w 打印进入和离开目录消息,前后处理。
-X 不要将通过命令行传递的变量单独导出到环境中。
在命令行上传递的变量仍然通过 标志
环境变量。 此选项可能对限制较小的系统很有用
关于命令参数的大小。
变量=值
设置变量的值 变量 至 折扣值. 通常,所有值都传递给
命令行也被导出到环境中的子制造商。 这 -X 旗
禁用此行为。 变量分配应遵循 POSIX 的选项
兼容性,但不强制执行排序。
makefile 中有七种不同类型的行:文件依赖规范、
shell 命令、变量赋值、包含语句、条件指令、for 循环、
和评论。
通常,行可以通过以反斜杠结束来从一行继续到下一行
('\')。 下一行的尾随换行符和初始空格是
压缩成一个空间。
文件 依赖度 产品规格
依赖线由一个或多个目标、一个运算符和零个或多个源组成。
这创建了一种关系,其中目标“依赖”于来源并且通常是
从他们创造。 确定目标和源之间的确切关系
由将它们分开的操作员。 三个运算符如下:
: 如果一个目标的修改时间小于任何
其来源。 目标的源在依赖行上累积时
使用运算符。 目标被移除,如果 制造商 被打断。
! 目标总是被重新创建,但直到所有源都被检查并重新创建
根据需要创建。 目标的源在依赖行上累积时
使用运算符。 目标被移除,如果 制造商 被打断。
:: 如果未指定源,则始终重新创建目标。 否则,目标是
如果其任何来源的修改时间比
目标。 目标的源不会在依赖行上累积时
使用运算符。 目标不会被移除,如果 制造商 被打断。
目标和源可能包含 shell 通配符值“?”、“*”、“[]”和“{}”。 这
值 '?'、'*' 和 '[]' 只能用作目标的最终组件的一部分或
源,并且必须用于描述现有文件。 值“{}”不一定是
用于描述现有文件。 展开按目录顺序排列,而不是按字母顺序排列
在外壳中完成。
SHELL 指令
每个目标都可能与一行或多行 shell 命令相关联,通常使用
创建目标。 此脚本中的每一行 必须 前面有一个制表符。 (为了
历史原因,不接受空格。)虽然目标可以出现在许多依赖项中
如果需要,默认情况下,创建脚本只能遵循这些规则之一。
如果“::' 运算符,但是,所有规则都可能包含脚本,并且脚本是
按照找到的顺序执行。
每行都被视为一个单独的 shell 命令,除非行尾用
反斜杠 ('\') 在这种情况下该行和下一行合并。 如果第一个字符
命令的任意组合是 '@','+', 要么 '-',该命令被特殊对待。 一种
“@' 导致命令在执行前不被回显。 一种 '+' 导致命令
即使在执行 -n 给出。 这类似于 .MAKE special 的效果
源,除了效果可以限制为脚本的单行。 一种 '-'in
兼容模式会导致命令行的任何非零退出状态被忽略。
什么时候 制造商 在作业模式下运行 -j 最大工作,目标的整个脚本被馈送到
外壳的单个实例。 在兼容(非作业)模式下,每个命令都在一个
单独的过程。 如果命令包含任何 shell 元字符
('#=|^(){};&<>*?[]:$`\\n') 它将被传递给shell; 除此以外 制造商 会尝试
直接执行。 如果一行以 '-' 并且外壳启用了 ErrCtl 然后失败
命令行的 将被忽略,就像在兼容模式下一样。 除此以外 '-' 影响
整个工作; 脚本将在第一个失败的命令行处停止,但目标将
不视为失败。
应该编写 Makefile 以便模式 制造商 操作不会改变他们的
行为。 例如,任何需要使用“cd”或“chdir”而没有潜在
更改后续命令的目录应放在括号中,以便执行
在一个子外壳中。 要强制使用一个 shell,请转义换行符以使
整个脚本一个命令。 例如:
避免 chdir 的副作用:
@echo 在 `pwd` 中构建 $@
@(cd ${.CURDIR} && ${MAKE} $@)
@echo 回到`pwd`
确保一个外壳不管模式:
@echo 在 `pwd` 中构建 $@; \
(cd ${.CURDIR} && ${MAKE} $@); \
回声回到`pwd`
建立 制造商 将 目录(2) 到 '.OBJ目录' 在执行任何目标之前,每个子进程
以此作为其当前工作目录开始。
变量 作业
make 中的变量很像 shell 中的变量,按照传统,它包含所有
大写字母。
请按需咨询 分配 修饰符
可用于为变量赋值的五个运算符如下:
= 将值分配给变量。 任何先前的值都将被覆盖。
+= 将值附加到变量的当前值。
?= 如果变量尚未定义,则将值分配给变量。
:= 用扩展赋值,即在将值赋给变量之前扩展它。
通常,在引用变量之前不会进行扩展。 注意: 参考
未定义的变量是 而不去 扩大了。 这在变量时可能会导致问题
使用了修饰符。
!= 展开该值并将其传递给 shell 执行并将结果分配给
多变的。 结果中的任何换行符都将替换为空格。
分配之前的任何空白 折扣值 已移除; 如果要附加值,则为
在变量的先前内容和附加的内容之间插入一个空格
计算值。
变量通过用大括号 ('{}') 或
括号 ('()') 并在其前面加上美元符号 ('$')。 如果变量名包含
只需要一个字母,不需要周围的大括号或圆括号。 这个较短
不推荐表格。
如果变量名称包含美元,则首先扩展名称本身。 这允许
几乎任意的变量名,但是包含美元、大括号、括号或
真的最好避免空格!
如果扩展变量的结果包含美元符号 ('$'),则扩展字符串
一次。
变量替换发生在三个不同的时间,具体取决于变量所在的位置
正在使用。
1. 依赖行中的变量在读取行时展开。
2、shell命令中的变量在shell命令执行时展开。
3. “.for”循环索引变量在每次循环迭代时扩展。 注意其他
变量不会在循环内扩展,因此以下示例代码:
.for i 在 1 2 3
a+= ${i}
j = ${i}
b+= ${j}
.endfor
所有:
@echo ${a}
@回声${b}
将打印:
1 2 3
3 3 3
因为在循环执行后 ${a} 包含“1 2 3”,而 ${b} 包含“${j}
${j} ${j}” 扩展为“3 3 3”,因为在循环完成后 ${j} 包含“3”。
请按需咨询 类
四种不同类别的变量(按优先级增加的顺序)是:
环境变量
定义为一部分的变量 制造商的环境。
全局变量
在生成文件或包含的生成文件中定义的变量。
命令行变量
定义为命令行一部分的变量。
局部变量
为特定目标定义的变量。
局部变量都是内置的,它们的值因目标而异。 它
目前无法定义新的局部变量。 七个局部变量为
如下:
.ALLSRC 此目标的所有来源的列表; 也称为“>“。
。档案 存档文件的名称; 也称为“!“。
.IMPSRC 在后缀转换规则中,源的名称/路径
目标将被转换(“隐含”源); 也称为“<'。 它
没有在明确的规则中定义。
。成员 档案成员的姓名; 也称为“%“。
.OODATE 此目标的被视为过时的源列表; 也被称为
为“?“。
。字首 目标的文件前缀,只包含文件部分,无后缀
或前面的目录组件; 也称为“*'。 后缀必须是
已知的后缀之一声明为 .后缀 否则不会
认可。
。目标 目标名称; 也称为“@“。
较短的形式 ('>','!','<','%','?','*',和'@') 允许向后
与历史 makefile 和旧 POSIX make 兼容,不推荐使用。
这些变量的变体,标点符号后紧跟“D”或“F”,例如
“$(@D)', 是与使用 ':H' 和 ':T' 修饰符等效的旧形式。 这些表格是
为与 AT&T System V UNIX 生成文件和 POSIX 兼容而接受,但不是
建议。
四个局部变量可以在依赖行的源中使用,因为它们扩展
到线上每个目标的正确值。 这些变量是 '。目标','。字首',
“。档案',和'。成员“。
额外 内建的 变量
此外, 制造商 设置或知道以下变量:
$ 单个美元符号'$',即'$$' 扩展为单个美元符号。
.ALLTARGETS Makefile 中遇到的所有目标的列表。 如果在评估期间
Makefile 解析,仅列出目前遇到的那些目标。
.CURDIR 所在目录的路径 制造商 被处决。 参考说明
'PWD' 了解更多详情。
.INCLUDEFROMDIR 包含
包含此 Makefile 的文件的目录。
.INCLUDEDFROM文件
包含此 Makefile 的文件的文件名。
MAKE 这个名字 制造商 被执行(argv [0])。 为了兼容性 制造商
还设置 。制作 具有相同的值。 要使用的首选变量是
环境变量 MAKE 因为它与其他版本更兼容
of 制造商 并且不能与同名的特殊目标混淆。
.Make.DEPENDFILE
命名makefile(默认'。依靠') 从中生成的依赖项
阅读。
.MAKE.EXPAND_VARIABLES
控制默认行为的布尔值 -V 选项。
.制造.出口 导出的变量列表 制造商.
.创造就业机会 的论点 -j 选项。
.MAKE.JOB.前缀
If 制造商 运行 j 然后每个目标的输出以令牌为前缀
'--- target ---' 第一部分可以通过
.MAKE.JOB.前缀。 如果 .MAKE.JOB.前缀 为空,不打印令牌。
例如: .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] 会
生成像 '---make[1234] target ---' 这样的标记,从而更容易跟踪
达到的并行度。
MAKEFLAGS 环境变量“MAKEFLAGS”可能包含任何可能
指定于 制造商的命令行。 任何指定的 制造商的命令
行附加到“MAKEFLAGS”变量,然后输入到
所有程序的环境 制造商 执行。
.make.level 递归深度 制造商. 的初始实例 制造商 将是 0,并且
一个递增的值被放入环境中以供下一个看到
一代。 这允许像这样的测试: .if ${.MAKE.LEVEL} == 0 来保护
应该只在初始实例中评估的东西 制造商.
.MAKE.MAKEFILE_PREFERENCE
生成文件名称的有序列表(默认为 '生成文件','生成文件') 那
制造商 会寻找。
.Make.Makefiles
读取的makefile列表 制造商,这对跟踪很有用
依赖关系。 每个 makefile 只记录一次,不管有多少
次阅读。
制作模式 读取所有生成文件后处理。 可以影响模式 制造商 运行
in. 它可以包含多个关键字:
兼容 喜欢 -B, 放 制造商 进入“兼容”模式。
目标 认沽期权 制造商 进入“元”模式,在其中创建元文件
捕获命令运行的每个目标,生成的输出和
if 菲莱蒙(4) 可用,系统调用是
兴趣 制造商. 捕获的输出在以下情况下非常有用
诊断错误。
curdirOK= bf 通常情况下 制造商 不会在 ' 中创建 .meta 文件.CURDIR'。 这个
可以通过设置覆盖 bf 到代表的值
真正。
ENV 对于调试,将环境包含在
.meta 文件。
详细 如果处于“元”模式,则打印有关正在构建的目标的线索。
如果构建以其他方式静默运行,这将很有用。 这
消息打印了以下值: .MAKE.META.前缀.
忽略-cmd 一些 makefile 的命令根本不稳定。 这个
关键字导致它们被忽略以确定是否
目标在“元”模式下已过期。 也可以看看 .NOMETA_CMP.
沉默= bf If bf 为 True,当创建 .meta 文件时,标记目标
。沉默的.
.MAKE.META.BALIWICK
在“元”模式下,提供与目录匹配的前缀列表
受控制于 制造商. 如果在外部生成的文件 .OBJ目录 但是
在上述范围内失踪,当前目标被认为是不合时宜的
日期。
.MAKE.META.创建
在“元”模式下,此变量包含所有更新的元文件的列表。
如果不为空,可用于触发处理 制作元文件.
制作元文件
在“元”模式下,此变量包含所有使用的元文件的列表
(更新与否)。 此列表可用于将元文件处理为
提取依赖信息。
.MAKE.META.IGNORE_PATHS
提供应该被忽略的路径前缀列表; 因为
内容预计会随着时间而改变。 默认列表包括: '的/ dev
/等 / proc中 / tmp目录 / var /运行 / var / tmp和
.MAKE.META.前缀
定义为“meta verbose”中更新的每个元文件打印的消息
模式。 默认值为:
建筑物 ${.TARGET:H:tA}/${.TARGET:T}
.改写 此变量用于记录分配给上的变量的名称
命令行,以便它们可以作为“MAKEFLAGS”的一部分导出。 这个
可以通过为 ' 分配一个空值来禁用行为.改写和
在生成文件中。 可以通过以下方式从 makefile 导出额外的变量
将他们的名字附加到 '.改写'。 'MAKEFLAGS' 被重新导出
每当'.改写' 被修改。
.MAKE.PATH_FILEMON
If 制造商 建于 菲莱蒙(4)支持,这个设置为路径
设备节点。 这允许 makefile 测试此支持。
.制作.PID 进程ID 制造商.
.制作.PPID 的父进程 ID 制造商.
.MAKE.SAVE_DOLLARS
值应该是一个布尔值,控制是否在执行时保留 '$$'
':=' 作业。 为了向后兼容,默认值为 false。 放
true 与其他品牌的兼容性。 如果设置为 false,则 '$$' 变为
'$' 按照正常的评估规则。
MAKE_PRINT_VAR_ON_ERROR
什么时候 制造商 由于错误而停止,它打印其名称和值
“.CURDIR' 以及中命名的任何变量的值
“MAKE_PRINT_VAR_ON_ERROR“。
。新队 这个变量被简单地分配了一个换行符作为它的值。 这个
允许使用扩展 :@ 在迭代之间放置换行符的修饰符
循环而不是空格。 例如,打印
“MAKE_PRINT_VAR_ON_ERROR' 可以这样做
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}。
.OBJ目录 构建目标的目录的路径。 它的价值是
通过尝试决定 目录(2) 依次进入以下目录
使用第一场比赛:
1. ${MAKEOBJDIRPREFIX}${.CURDIR}
(仅当在环境或命令中设置了“MAKEOBJDIRPREFIX”
线。)
2.${MAKEOBJDIR}
(仅当在环境或命令中设置了“MAKEOBJDIR”时
线。)
3.${.CURDIR}/物件。${机器}
4.${.CURDIR}/物件
5. /usr/对象/${.CURDIR}
6.${.CURDIR}
变量扩展是在使用之前对值进行的,所以
诸如此类的表达
${.CURDIR:S,^/ usr / src,/变量/对象,}
可能用过了。 这对“MAKEOBJDIR”特别有用。
“.OBJ目录' 可以通过特殊目标在 makefile 中修改.OBJ目录“。
在所有情况下, 制造商 将 目录(2) 到指定目录如果存在,
并设置'.OBJ目录' 和 'PWD' 到该目录,然后再执行任何目标。
.PARSE目录 当前 ' 目录的路径生成文件' 正在解析。
.解析文件 当前 ' 的基名生成文件' 正在解析。 这个变量和
“.PARSE目录' 都只在 '生成文件' 正在被解析。 如果
你想保留它们的当前值,使用它们将它们分配给一个变量
带扩展的赋值:(':=“)。
。小路 表示目录列表的变量 制造商 会搜索
对于文件。 应使用目标 ' 更新搜索列表。小路和
而不是变量。
PWD 当前目录的备用路径。 制造商 通常设置 '.CURDIR' 到
由给出的规范路径 获取cwd(3). 但是,如果环境变量
设置“PWD”并给出当前目录的路径,然后 制造商 套
“.CURDIR'改为'PWD'的值。 如果出现以下情况,则禁用此行为
'MAKEOBJDIRPREFIX' 已设置或 'MAKEOBJDIR' 包含变量转换。
'PWD' 设置为 '.OBJ目录' 对于所有程序 制造商
执行。
.TARGETS 在命令行上明确指定的目标列表(如果有)。
VPATH 冒号分隔 (“:”) 目录列表 制造商 将搜索文件。
仅支持该变量与旧的 make 程序兼容,请使用
“。小路' 反而。
请按需咨询 修饰符
可以修改变量扩展以选择或修改变量的每个单词(其中 a
“word”是空格分隔的字符序列)。 变量的一般格式
扩展如下:
${变量[:修饰符[:...]]}
每个修饰符都以冒号开头,可以用反斜杠 ('\') 转义。
可以通过变量指定一组修饰符,如下所示:
修饰符_变量=修饰符[:...]
${变量:${modifier_variable}[:...]}
在这种情况下,modifier_variable 中的第一个修饰符不以冒号开头,因为
必须出现在引用变量中。 如果任何修饰符在
modifier_variable 包含美元符号 ('$'),这些必须加倍以避免过早
扩张。
支持的修饰符是:
:E 用其后缀替换变量中的每个单词。
:H 用除最后一个组件之外的所有内容替换变量中的每个单词。
:M模式
只选择那些匹配的词 模式. 标准 shell 通配符
('*', '?', 和 '[]') 可以使用。 通配符可以用
反斜杠('\')。 由于将值拆分为单词、匹配和
然后加入,一个像
${变量:M*}
将标准化字间距,删除所有前导和尾随空格,以及
将多个连续空格转换为单个空格。
:N模式
这与 ':M', 但选择所有不匹配的单词 模式.
:O 按字母顺序排列变量中的每个单词。 要以相反的顺序对单词进行排序,请使用
“:O:[-1..1]' 修饰符的组合。
:牛 随机化变量中的单词。 每次引用的结果都会不同
到修改后的变量; 使用带有扩展的赋值 (':=') 以防止此类
行为。 例如,
LIST= uno 由于 tre quattro
随机列表= ${列表:牛}
STATIC_RANDOM_LIST:= ${LIST:Ox}
所有:
@echo "${RANDOM_LIST}"
@echo "${RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
@echo "${STATIC_RANDOM_LIST}"
可能会产生类似于以下内容的输出:
quattro 由于 tre uno
tre 由于quattro uno
由于 uno quattro tre
由于 uno quattro tre
:Q 引用变量中的每个 shell 元字符,以便它可以安全地传递
通过递归调用 制造商.
:R 用除后缀之外的所有内容替换变量中的每个单词。
:gm时间
该值是一个格式字符串 时间(3)、使用电流 准时(3)。
:哈希
计算该值的 32 位哈希值并将其编码为十六进制数字。
:当地时间
该值是一个格式字符串 时间(3)、使用电流 当地时间(3)。
:tA 尝试使用将变量转换为绝对路径 实路径(3) 如果失败,则
值不变。
:tl 将变量转换为小写字母。
:tsc
变量中的单词通常在扩展时用空格分隔。 这个修饰符
将分隔符设置为字符 c。 如果 c 省略,则不使用分隔符。
常见的转义(包括八进制数字代码)按预期工作。
:你 将变量转换为大写字母。
:tw 使值被视为单个单词(可能包含嵌入的白色
空间)。 也可以看看 ':[*]“。
:台湾 使值被视为由空格分隔的单词序列。 看
还 ':[@]“。
:S/旧字符串/新字符串/[1GW]
修改第一次出现 旧字符串 在变量的值中,将其替换为
新字符串. 如果将“g”附加到模式的最后一个斜杠,则所有出现在
每个词都被替换。 如果将“1”附加到模式的最后一个斜杠,则只有
第一个词受到影响。 如果'W'被附加到模式的最后一个斜杠,
然后将该值视为单个单词(可能包含嵌入的空格)。
If 旧字符串 以插入符号 ('^') 开头, 旧字符串 锚定在开头
每个字。 如果 旧字符串 以美元符号 ('$') 结尾,它锚定在
每个字。 里面 新字符串, 与号 ('&') 被替换为 旧字符串 (无
任何“^”或“$”)。 任何字符都可以用作部分的分隔符
修饰符字符串。 锚定、与号和定界符可以用
反斜杠 ('\')。
变量扩展以正常方式发生在两个内部 旧字符串 和 新字符串
唯一的例外是使用反斜杠来防止美元膨胀
符号('$'),而不是像往常一样前面的美元符号。
:C/模式/替代/[1GW]
这款 :C 修饰符就像 :S 修饰符,除了旧的和新的字符串,
不是简单的字符串,而是扩展的正则表达式(请参阅 正则表达式(3))
绳子 模式 和 ed(1)式字符串 替代. 通常,第一次出现
模式的 模式 在值的每个单词中替换为 替代。 该
'1' 修饰符导致替换应用于最多一个单词; 'g' 修饰符
导致替换应用于尽可能多的搜索模式实例 模式 as
出现在它所在的一个或多个词中; 'W' 修饰符使值变为
视为单个单词(可能包含嵌入的空格)。 请注意,“1”和
'g' 是正交的; 前者指定多个词是否可能
受影响,后者是否可能在每个内部发生多次替换
受影响的词。
至于 :S 修饰符 模式 和 替代 受到可变扩展
在被解析为正则表达式之前。
:T 将变量中的每个单词替换为其最后一个组件。
:u 删除相邻的重复词(如 优衣库(1))。
:?真字符串:假字符串
如果变量名(不是它的值),当解析为 .if 条件表达式时,
评估为真,返回作为其值 真字符串, 否则返回
假字符串. 由于变量名用作表达式, :? 必须是第一个
变量名本身后的修饰符 - 当然,通常包含
变量扩展。 一个常见的错误是尝试使用类似的表达式
${NUMBERS:M42:?匹配:否}
实际测试定义(NUMBERS),以确定是否有任何单词匹配“42”,您需要
使用类似的东西:
${"${NUMBERS:M42}" != "":?match:no}。
:旧字符串=新字符串
这是 AT&T System V UNIX 风格的变量替换。 应该是最后
修饰符指定。 如果 旧字符串 or 新字符串 不包含模式匹配
字符 % 那么假设它们锚定在每个词的末尾,所以只有
可以替换后缀或整个单词。 除此以外 % 是子串 旧字符串
被替换在 新字符串.
变量扩展以正常方式发生在两个内部 旧字符串 和 新字符串
唯一的例外是使用反斜杠来防止美元膨胀
符号('$'),而不是像往常一样前面的美元符号。
:@温度@绳子@
这是来自 OSF 开发环境 (ODE) make 的循环扩展机制。
不比 。对于 循环扩展发生在引用时。 分配 温度 对每一个字
在变量中并评估 绳子. ODE 约定是 温度 应该开始和
以句号结束。 例如。
${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
然而,单个字符变量通常更具可读性:
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
:U纽瓦尔
如果变量未定义 纽瓦尔 是价值。 如果定义了变量,则
返回现有值。 这是另一个 ODE 生成功能。 设置起来很方便
每个目标 CFLAGS 例如:
${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}}
如果仅在未定义变量时才需要值,请使用:
${VAR:D:Unewval}
:D纽瓦尔
如果定义了变量 纽瓦尔 是价值。
:L 变量的名称就是值。
:P 与变量同名的节点的路径就是值。 如果没有这样的
节点存在或其路径为空,则使用变量的名称。 为了
此修饰符起作用,名称(节点)必须至少出现在
依赖性。
:!CMD!
运行输出 CMD 是价值。
:嘘 如果变量不为空,则它作为命令运行并且输出成为新的
计算值。
:: =STR
变量被赋值 STR 替换后。 这个修饰符和它的
变体在晦涩的情况下很有用,例如想要在以下情况下设置变量
正在解析 shell 命令。 这些赋值修饰符总是扩展为空,
所以如果自己出现在规则行之前应该有一些东西要保留
制造商 快乐。
左侧工具栏上的'::' 有助于避免与 AT&T System V UNIX 风格的错误匹配 := 修饰符和
因为替换总是发生 :: = 形式隐约合适。
::?=STR
至于 :: = 但前提是变量还没有值。
::+=STR
附加 STR 到变量。
::!=CMD
分配输出 CMD 到变量。
:[范围]
从值中选择一个或多个单词,或执行与该值相关的其他操作
将值划分为单词的方式。
通常,一个值被视为由空格分隔的一系列单词。 一些
修饰符抑制此行为,导致值被视为单个单词
(可能包含嵌入的空白)。 一个空值,或一个包含
完全是空白,被视为一个词。 出于“:[]和
修饰符,单词使用正整数向前索引(其中索引 1
表示第一个单词),并使用负整数(其中索引 -1
代表最后一个字)。
这款 范围 进行变量扩展,然后扩展的结果是
解释如下:
指数 从值中选择一个单词。
开始.. end
选择所有单词 开始 至 end, 包括的。 例如, ':[2..-1]' 选择
从第二个单词到最后一个单词的所有单词。 如果 开始 大于 end,
然后以相反的顺序输出单词。 例如, ':[-1..1]' 选择所有
从最后到第一个单词。
* 导致后续修饰符将值视为单个单词(可能
包含嵌入的空白)。 类似于 Bourne 中 "$*" 的效果
贝壳。
0 表示与 ' 相同:[*]“。
@ 导致后续修饰符将值视为分隔的单词序列
通过空白。 类似于 Bourne shell 中“$@”的效果。
# 返回值中的单词数。
包括 声明, 条件 AND 用于 圈数
Makefile 包含、条件结构和 for 循环让人想起 C 编程
语言提供在 制造商. 所有这些结构都由以开头的行标识
一个点 ('.') 字符。 文件包含在 。包括 ⟨文件⟩ 或者 。包括
"文件". 尖括号或双引号之间的变量被展开形成文件
姓名。 如果使用尖括号,则包含的 makefile 应在系统中
生成文件目录。 如果使用双引号,则包括 makefile 的目录和任何
使用指定的目录 -I 在系统 makefile 目录之前搜索选项。
为了与其他版本的兼容 制造商 'include file ...' 也被接受。
如果 include 语句写成 。-包括 或者作为 .sinclude 然后错误定位和/或
打开的包含文件将被忽略。
如果 include 语句写成 .d包括 不仅是定位和/或打开错误
忽略包含文件,但包含文件中的陈旧依赖项将被忽略
喜欢 .Make.DEPENDFILE.
条件表达式前面也有一个点作为行的第一个字符。
可能的条件如下:
。错误 消息
该消息与 makefile 的名称和行号一起打印,然后
制造商 将退出。
。出口 变量 ...
导出指定的全局变量。 如果未提供变量列表,则所有全局变量
除了内部变量(以“.”开头的那些)外,都被导出。 这不是
受...的影响 -X 标志,因此应谨慎使用。 为了兼容
other 制造商 程序 'export variable=value' 也被接受。
将变量名附加到 .制造.出口 相当于导出一个变量。
.export-env 变量 ...
与 '.export' 相同,只是变量没有附加到 .制造.出口.
这允许将值导出到与使用的环境不同的环境中
by 制造商 内部。
.export-文字 变量 ...
与 '.export-env' 相同,只是值中的变量不展开。
基本资料 消息
该消息与生成文件的名称和行号一起打印。
.undef 变量
取消定义指定的全局变量。 只有全局变量可以是未定义的。
.unexport 变量 ...
'.export' 的反义词。 指定的全局 变量 将从
.制造.出口. 如果未提供变量列表,则所有全局变量都不会导出,并且
.制造.出口 删除。
.unexport-env
取消导出以前导出的所有全局变量并清除继承自的环境
父母。 这个操作会造成原环境的内存泄漏,所以
应谨慎使用。 测试 .make.level 为 0,是有道理的。 还
请注意,任何源自父环境的变量都应该是
如果需要,明确保留。 例如:
.if ${.MAKE.LEVEL} == 0
路径 := ${PATH}
.unexport-env
.出口路径
。万一
将导致仅包含“PATH”的环境,这是最小有用的
环境。 实际上'.MAKE.LEVEL'也会被推送到新环境中。
。警告 消息
以 ' 为前缀的消息警告:' 与 makefile 的名称一起打印
和行号。
。如果 [!]表达 [操作者 表达 ...]
测试表达式的值。
.ifdef [!]变量 [操作者 变量 ...]
测试变量的值。
.ifndef [!]变量 [操作者 变量 ...]
测试变量的值。
.ifmake [!]目标 [操作者 目标 ...]
测试正在构建的目标。
.ifnmake [!] 目标 [操作者 目标 ...]
测试正在构建的目标。
。别的 反转最后一个条件的意义。
.elif [!] 表达 [操作者 表达 ...]
'的组合。别的' 其次是 '。如果“。
.elifdef [!]变量 [操作者 变量 ...]
'的组合。别的' 其次是 '.ifdef“。
.elifndef [!]变量 [操作者 变量 ...]
'的组合。别的' 其次是 '.ifndef“。
.elifmake [!]目标 [操作者 目标 ...]
'的组合。别的' 其次是 '.ifmake“。
.elifnmake [!]目标 [操作者 目标 ...]
'的组合。别的' 其次是 '.ifnmake“。
。万一 结束条件体。
这款 操作者 可以是以下任何一种:
|| 逻辑或。
&& 逻辑与; 优先级高于“||”。
如在 C 中, 制造商 只会在必要时评估条件以确定其
价值。 括号可用于更改计算顺序。 布尔运算符 '!和
可用于逻辑否定整个条件。 它的优先级高于
“&&“。
价值 表达 可能是以下任何一种:
定义 将变量名作为参数,如果变量已被赋值,则计算结果为真
定义。
使 将目标名称作为参数,如果目标是
指定为的一部分 制造商的命令行或被声明为默认目标
(隐式或显式,请参阅 。主要的) 在包含
有条件的。
空的 取一个变量,带有可能的修饰符,如果扩展,则评估为真
的变量将导致一个空字符串。
存在 将文件名作为参数,如果文件存在则计算结果为真。 这
在系统搜索路径上搜索文件(请参阅 。小路).
目标 将目标名称作为参数,如果目标已被评估为真
定义。
命令
将目标名称作为参数,如果目标已被评估为真
定义并具有与之关联的命令。
口语 也可以是算术或字符串比较。 执行变量扩展
在比较的两边,然后比较积分值。 一个值是
如果前面有0x,则解释为十六进制,否则为十进制; 八进制数
不支持。 标准 C 关系运算符都受支持。 如果之后
变量扩展,无论是在 ' 的左侧还是右侧==' 要么 '!=' 运算符不是
整数值,然后在扩展变量之间进行字符串比较。 如果不
给出关系运算符,假设正在比较扩展变量
在字符串比较的情况下,针对 0 或空字符串。
什么时候 制造商 正在评估这些条件表达式之一,并且遇到一个 (white-
空格分隔)它无法识别的单词,“make”或“defined”表达式是
应用于它,取决于条件的形式。 如果表格是 '.ifdef',
“.ifndef', 要么 '。如果' 应用了“定义的”表达式。 类似地,如果表格是
“.ifmake' 要么 '.ifnmake, 此' 应用了“make”表达式。
如果条件评估为真,则生成文件的解析会像以前一样继续。 如果它
评估为假,以下几行被跳过。 在这两种情况下,这一直持续到
“。别的' 要么 '。万一' 被发现。
For 循环通常用于将一组规则应用于文件列表。 的语法
for循环是:
。对于 变量 [变量 ...] in 表达
⟨制定规则⟩
.endfor
在 for 之后 表达 被评估,它被拆分成单词。 在每次迭代中
循环,取一个词并分配给每个词 变量,按顺序,而这些 变量 旨在
代入 制定规则 在 for 循环体内。 字数必须
出来均匀; 也就是说,如果有三个迭代变量,提供的词数
必须是三的倍数。
评论
注释以散列 ('#') 字符开头,可以在 shell 命令行之外的任何地方,以及
继续到未转义的新行的末尾。
特别 来源 (属性)
.EXEC Target 永远不会过时,但无论如何都要执行命令。
。忽略 忽略与此目标关联的命令中的任何错误,就像
它们都以破折号 ('-') 开头。
。制作 将此目标的所有来源标记为最新。
。制作 执行与此目标关联的命令,即使 -n or -t 选项是
指定的。 通常用于标记递归 制造商s.
.META 为目标创建一个元文件,即使它被标记为 。假, 。制作或
。特别的. 结合使用 。制作 是最有可能的情况。 在“元”中
模式,如果元文件丢失,则目标已过期。
.NOMETA 不要为目标创建元文件。 元文件也不是为
。假, 。制作或 。特别的 的目标。
.NOMETA_CMP
在确定目标是否过时时忽略命令中的差异。 这是
如果命令包含始终更改的值,则很有用。 如果数量
命令更改,但是,目标仍然是过时的。 一样的效果
适用于任何使用该变量的命令行 .OODATE,可用于
即使不需要或不希望达到该目的:
跳过比较部分:
@echo 这将被比较
@echo 这不会 ${.OODATE:M.NOMETA_CMP}
@echo 这也将被比较
这款 :M 模式抑制不需要的变量的任何扩展。
.NOPATH 不要在指定的目录中搜索目标 。小路.
.NOTMAIN 通常情况下 制造商 选择它遇到的第一个目标作为默认目标
如果未指定目标,则构建。 此源阻止此目标被
选择。
。可选的
如果目标标有此属性并且 制造商 不知道如何创建
它,它会忽略这个事实并假设该文件不需要或已经存在。
。假 目标与实际文件不对应; 它总是被认为是
已过时,并且不会与 -t 选项。 后缀变换
规则不适用于 。假 的目标。
。宝贵的
什么时候 制造商 被打断,它通常会移除任何部分制作的目标。 这个
源阻止目标被删除。
.递归
同义词 。制作.
。沉默的 不要回显与此目标关联的任何命令,就像它们一样
所有前面都有一个 at 符号 ('@')。
。用 把目标变成 制造商的宏版本。 当目标用作
另一个目标的源,另一个目标获取命令、源和
属性(除了 。用) 的来源。 如果目标已经有命令,
此 。用 目标的命令被附加到它们之后。
.使用之前
完全像 。用,但在前面加上 .使用之前 target 命令到目标。
。等待 If 。等待 出现在依赖行中,在它之前的源是在之前制作的
成功的来源。 由于文件的依赖项不是
直到文件本身可以被制作,这也停止了依赖
除非依赖树的另一个分支需要它们。 所以给出:
x:a .等待 b
回声 x
a:
回声
乙:乙1
回声
乙1:
回声 b1
输出总是“a”、“b1”、“b”、“x”。
强加的排序 。等待 仅与平行品牌相关。
特别 目标
特殊目标不能包含在其他目标中,即它们必须是唯一的目标
指定的。
。开始 附加到此目标的任何命令行都在执行其他任何命令之前执行
完成。
。默认
这是一种 。用 任何目标(仅用作源)的规则
制造商 想不出其他的创作方式。 仅使用 shell 脚本。
这款 .IMPSRC 继承目标的变量 。默认的命令设置为
目标自己的名字。
。END 附加到此目标的任何命令行都在其他所有内容完成后执行
完成。
。错误 当另一个目标失败时,将执行附加到该目标的任何命令行。
这款 .ERROR_TARGET 变量设置为失败的目标。 也可以看看
MAKE_PRINT_VAR_ON_ERROR.
。忽略 用 。忽略 属性。 如果没有指定来源,
这相当于指定 -i 选项。
。打断
If 制造商 被中断,该目标的命令将被执行。
。主要的 如果没有指定目标时 制造商 被调用,这个目标将被构建。
.makeflags
此目标提供了一种指定标志的方法 制造商 当使用 makefile 时。
这些标志就像是输入到 shell 中一样,尽管 -f 选项将不起作用。
.NOPATH 应用 .NOPATH 属性到任何指定的来源。
.非平行
禁用并行模式。
.NO_PARALLEL
同义词 .非平行, 与其他 pmake 变体兼容。
.OBJ目录 源是 ' 的新值.OBJ目录'。 如果存在, 制造商 将 目录(2) 给它
并更新 ' 的值.OBJ目录“。
。命令 命名的目标是按顺序制作的。 此排序不会将目标添加到
要制定的目标清单。 由于未构建目标的依赖项
直到可以构建目标本身,除非 'a' 是由其他部分构建的
依赖图,下面是一个依赖循环:
.订单:巴
b:一个
强加的排序 。命令 仅与平行品牌相关。
。小路 源是要搜索的目录中未找到的文件
当前目录。 如果未指定来源,则任何先前指定的
目录被删除。 如果来源是特殊的 .DOTLAST 目标,那么
最后搜索当前工作目录。
。小路。后缀
喜欢 。小路 但仅适用于具有特定后缀的文件。 后缀必须
之前已经声明过 .后缀.
。假 应用 。假 属性到任何指定的来源。
。宝贵的
应用 。宝贵的 属性到任何指定的来源。 如果没有来源
指定, 。宝贵的 属性应用于文件中的每个目标。
。贝壳 设置外壳 制造商 将用于执行命令。 来源是一组
字段=值 对。
姓名 这是最小的规范,用于选择一个内置的
外壳规格; sh, KSH及 长山壕.
径 指定 shell 的路径。
错误控制 指示 shell 是否支持出错时退出。
查 打开错误检查的命令。
忽略 禁用错误检查的命令。
回音 用于打开已执行命令的回显的命令。
安静 关闭已执行命令回显的命令。
过滤 发出后要过滤的输出 安静 命令。 它通常是
相同 安静.
错误标志 传递 shell 以启用错误检查的标志。
回声标志 传递 shell 以启用命令回显的标志。
新队 传递导致单个换行符的 shell 的字符串文字
在任何引用字符之外使用时的字符。
示例:
.SHELL: 名称=ksh 路径=/bin/ksh hasErrCtl=true \
check="set -e" ignore="set +e" \
echo="set -v" quiet="set +v" filter="set +v" \
echoFlag=v errFlag=e newline="'\n'"
。沉默的 应用 。沉默的 属性到任何指定的来源。 如果没有指定来源,
此 。沉默的 属性应用于文件中的每个命令。
。陈旧 当依赖文件包含陈旧条目时,此目标会运行,具有 .ALLSRC
设置为该依赖文件的名称。
.后缀
每个源指定一个后缀 制造商. 如果没有指定来源,任何
先前指定的后缀被删除。 它允许创建后缀 -
转换规则。
示例:
.后缀:.o
.co:
cc -o ${.TARGET} -c ${.IMPSRC}
环境
制造商 使用以下环境变量(如果存在):MACHINE、MACHINE_ARCH、
MACHINE_MULTIARCH、MAKE、MAKEFLAGS、MAKEOBJDIR、MAKEOBJDIRPREFIX、MAKESYSPATH、PWD 和
TMPDIR。
MAKEOBJDIRPREFIX 和 MAKEOBJDIR 只能在环境或命令行中设置
制造商 而不是作为 makefile 变量; 见描述 '.OBJ目录' 更多细节。
使用 onworks.net 服务在线使用 pmake