Syntax Makefile:两个语法问题
软件包版本:=$(版本)x0d$(日期) 版本和日期变量之间的x0d部分是什么?只是一根绳子吗Syntax Makefile:两个语法问题,syntax,makefile,Syntax,Makefile,软件包版本:=$(版本)x0d$(日期) 版本和日期变量之间的x0d部分是什么?只是一根绳子吗 $(dotin\u文件:.in=)在下面做了什么 代码 这意味着什么$(dotin\u文件:=.in) 代码 目标可以包含多个文件吗 将目标变量声明为假的意思是什么 代码 在下面的正则表达式替换代码中 代码 什么是$$ENV{$$1}和$$&?我想这是Perl范围 感谢您抽出时间变量扩展 $()是make中的变量扩展,如果makefile是 version=1 date=1.1.10 p
- 这意味着什么$(dotin\u文件:=.in)
- 目标可以包含多个文件吗
- 将目标变量声明为假的意思是什么
- 在下面的正则表达式替换代码中
$$ENV{$$1}
和$$&
?我想这是Perl范围
感谢您抽出时间变量扩展
$()
是make中的变量扩展,如果makefile是
version=1
date=1.1.10
package_version:=$(version)x0d$(date)
然后变量package\u version
将扩展到1x0d1.1.10
替代
语法$(var:a=b)
是a,将扩展为var
,后缀a
替换为b
例如,在
foobar:= foo bar
faabar:=$(foobar:oo=aa)
$(faabar)
将扩展到字符串faa条
多个目标
make规则中的多个目标相当于有n个规则和一个目标,例如
foo bar:foo.c bar.c
$(CC) -o $@ $^
相当于
foo:foo.c bar.c
$(CC) -o $@ $^
bar:foo.c bar.c
$(CC) -o $@ $^
记住,这里的任何变量都是展开的
虚假目标
.PHONY
目标声明规则不会生成实际文件,因此它将始终被构建。一如既往,变量首先展开。在您的情况下,这将扩展到
.PHONY: foo bar
转义
美元符号是makefiles中的转义字符,perl示例中的$$
是文本$
,例如substitute
将是字符串
perl -p -e 's/@([^@]+)@/defined $ENV{$1} ? $ENV{$1} : $&/ge'
这里的美元符号是由perl处理的,可能会给出环境变量(我不知道perl)。变量扩展
$()
是make中的变量扩展,如果makefile是
version=1
date=1.1.10
package_version:=$(version)x0d$(date)
然后变量package\u version
将扩展到1x0d1.1.10
替代
语法$(var:a=b)
是a,将扩展为var
,后缀a
替换为b
例如,在
foobar:= foo bar
faabar:=$(foobar:oo=aa)
$(faabar)
将扩展到字符串faa条
多个目标
make规则中的多个目标相当于有n个规则和一个目标,例如
foo bar:foo.c bar.c
$(CC) -o $@ $^
相当于
foo:foo.c bar.c
$(CC) -o $@ $^
bar:foo.c bar.c
$(CC) -o $@ $^
记住,这里的任何变量都是展开的
虚假目标
.PHONY
目标声明规则不会生成实际文件,因此它将始终被构建。一如既往,变量首先展开。在您的情况下,这将扩展到
.PHONY: foo bar
转义
美元符号是makefiles中的转义字符,perl示例中的$$
是文本$
,例如substitute
将是字符串
perl -p -e 's/@([^@]+)@/defined $ENV{$1} ? $ENV{$1} : $&/ge'
这里的美元符号是由perl处理的,可能会给出环境变量(我不知道perl)。Michael,你已经问了很多基本的Makefile问题,现在你要问的是那些你应该能够通过实验自己回答的问题
can target contain multiple files?
试试看:
dotin_files := foo.in bar.in
$(dotin_files):
@echo $@
现在尝试makefoo.in
和makebar.in
。会发生什么
What $(dotin_files:.in=) does
这是一个替代参考。你自己试试,看看会发生什么,比如:
dotin_files := foo.in bar.in
dotin_files := $(dotin_files:.in=)
all:
@echo $(dotin_files)
它做了什么
substitute := perl -p -e 's/@([^@]+)@/defined $$ENV{$$1} ? $$ENV{$$1} : $$&/ge'
what are $$ENV{$$1} and $$&? I guess it's Perl scope...
我们来看看,
all:
@echo $(substitute)
如果您想了解更多关于Perl、Regex、find、make或其他方面的知识,请在这里随意提问,但请先花点时间尝试解决它。Michael,您已经问了很多基本的Makefile问题,现在要问的是您应该能够通过实验自己回答的问题
can target contain multiple files?
试试看:
dotin_files := foo.in bar.in
$(dotin_files):
@echo $@
现在尝试makefoo.in
和makebar.in
。会发生什么
What $(dotin_files:.in=) does
这是一个替代参考。你自己试试,看看会发生什么,比如:
dotin_files := foo.in bar.in
dotin_files := $(dotin_files:.in=)
all:
@echo $(dotin_files)
它做了什么
substitute := perl -p -e 's/@([^@]+)@/defined $$ENV{$$1} ? $$ENV{$$1} : $$&/ge'
what are $$ENV{$$1} and $$&? I guess it's Perl scope...
我们来看看,
all:
@echo $(substitute)
如果您想了解更多关于Perl、Regex、find、make或其他方面的信息,请在这里随意提问,但请先花点时间尝试解决。- 版本和日期变量之间的x0d部分,是否只是字符串?
对 - 美元(dotin_文件:.in=)在下面做了什么
从与shell find一起找到的文件名中删除.in - 这意味着$(dotin_文件:=.in)
我想你指的是$(dotin_文件:.in=)。如前所述,在变量dotin_文件中,它用空字符串(介于“=”和“)”之间的部分)替换出现的“.in” - 目标能否包含多个文件?
对 - 将目标变量声明为假的含义是什么?
将忽略目标时间戳并将其视为新的 因此每次都要重建它们 - 在下面的正则表达式替换代码中$$ENV{$$1}和$$&是什么?
perl-p-e的/@([^@]+)@/defined$$ENV{$$1}$$环境{$$1}:$$&/ge'
当作为shell命令调用时,命令将变为:
perl-p-e的/@([^@]+)@/定义的$ENV{$1}$环境{$1}:$&/ge' $ENV是perl环境散列,$1我认为它是s///regexp组中的一个反向引用。
- 版本和日期变量之间的x0d部分,是否只是字符串?
对 - 美元(dotin_文件:.in=)在下面做了什么
从与shell find一起找到的文件名中删除.in - 这意味着$(dotin_文件:=.in)
我想你指的是$(dotin_文件:.in=)。如前所述,在变量dotin_文件中,它将替换任何事件