使用awk提取Makefile中的特定文本
我有一个这种格式的配置文件使用awk提取Makefile中的特定文本,awk,makefile,Awk,Makefile,我有一个这种格式的配置文件 foo=bar fie=boo .. .. 还有一个Makefile,我想提取一行配置文件,它有一个字符串'disk_size',然后提取分配给变量的值 这是我在Makefile中使用的行 fallocate -l $(shell awk -F= '/disk_size/ { print $2 }' $(conf)) $@ 但是我收到了这个错误,(整行都被提取出来了。) awk命令在终端中工作,但在Makefile中不工作,为什么 tnx您可能只需要转义$: f
foo=bar
fie=boo
..
..
还有一个Makefile,我想提取一行配置文件,它有一个字符串'disk_size',然后提取分配给变量的值
这是我在Makefile中使用的行
fallocate -l $(shell awk -F= '/disk_size/ { print $2 }' $(conf)) $@
但是我收到了这个错误,(整行都被提取出来了。)
awk命令在终端中工作,但在Makefile中不工作,为什么
tnx您可能只需要转义
$
:
fallocate -l $(shell awk -F= '/disk_size/ { print $$2 }' $(conf)) $@
Make试图使用变量
$2
,而不是将字符串$2
传递给awk。您可能只需要转义$
:
fallocate -l $(shell awk -F= '/disk_size/ { print $$2 }' $(conf)) $@
Make试图使用变量
$2
,而不是将字符串$2
传递给awk。如果您的配置文件确实是这种格式:
foo = bar
disk_size = 1234
您可以直接将其包含在Makefile中:
# Include configuration file
include $(conf)
target:
fallocate -l $(disk_size)
如果没有配置文件,您还可以使用-
操作符忽略include
命令的错误,并指定默认值
# Include configuration file
-include $(conf)
# Set default size
disk_size ?= 5678
target:
fallocate -l $(disk_size)
如果您的配置文件确实是这种格式:
foo = bar
disk_size = 1234
您可以直接将其包含在Makefile中:
# Include configuration file
include $(conf)
target:
fallocate -l $(disk_size)
如果没有配置文件,您还可以使用-
操作符忽略include
命令的错误,并指定默认值
# Include configuration file
-include $(conf)
# Set default size
disk_size ?= 5678
target:
fallocate -l $(disk_size)
我从未在
awk
中见过$$2
,我怀疑这会起作用。@fedorquiawk
不会看到$$2
。Make将看到$$2
并将$2
传递给awk。因此,这是一种“转义”$
的方法,以便awk
仍能看到$2
。好的,很好,我不知道!您不想在这里使用$(shell)
。它在错误的时间执行,毫无意义。您已经在shell上下文中了。只需使用$(…)
。我从未在awk
中见过$$2
,我怀疑这会起作用。@fedorquiawk
不会看到$$2
。Make将看到$$2
并将$2
传递给awk。因此,这是一种“转义”$
的方法,以便awk
仍能看到$2
。好的,很好,我不知道!您不想在这里使用$(shell)
。它在错误的时间执行,毫无意义。您已经在shell上下文中了。只需使用$(…)
。可能有反对的理由,但可以想象的是,您可以直接在makefile中说包含$(conf)
并使用$(磁盘大小)
。可能有反对的理由,但可以想象的是,您可以说包含$(conf)
并使用$(磁盘大小)
直接在makefile中。