使用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
,我怀疑这会起作用。@fedorqui
awk
不会看到
$$2
。Make将看到
$$2
并将
$2
传递给awk。因此,这是一种“转义”
$
的方法,以便
awk
仍能看到
$2
。好的,很好,我不知道!您不想在这里使用
$(shell)
。它在错误的时间执行,毫无意义。您已经在shell上下文中了。只需使用
$(…)
。我从未在
awk
中见过
$$2
,我怀疑这会起作用。@fedorqui
awk
不会看到
$$2
。Make将看到
$$2
并将
$2
传递给awk。因此,这是一种“转义”
$
的方法,以便
awk
仍能看到
$2
。好的,很好,我不知道!您不想在这里使用
$(shell)
。它在错误的时间执行,毫无意义。您已经在shell上下文中了。只需使用
$(…)
。可能有反对的理由,但可以想象的是,您可以直接在makefile中说
包含$(conf)
并使用
$(磁盘大小)
。可能有反对的理由,但可以想象的是,您可以说
包含$(conf)
并使用
$(磁盘大小)
直接在makefile中。