使用awk提取Makefile中的特定文本

时间:2015-04-28 13:44:12

标签: awk makefile

我有一个这种格式的配置文件

foo=bar
fie=boo
..
..

并且有一个Makefile,我想提取一行配置文件,其中包含一个字符串' disk_size'然后提取分配给变量的值

这是我在Makefile中使用的行

fallocate -l $(shell awk -F= '/disk_size/ { print $2 }' $(conf)) $@ 

但是我收到了这个错误,(整条线被解压缩了。)

fallocate -l disk_size=268435456 disk.img
fallocate: invalid length value specified

awk命令在终端中工作,但它在Makefile中不起作用,为什么?

TNX

2 个答案:

答案 0 :(得分:6)

您可能只需要逃避$

fallocate -l $(shell awk -F= '/disk_size/ { print $$2 }' $(conf)) $@ 

Make正在尝试使用变量$2,而不是将字符串$2传递给awk。

答案 1 :(得分:1)

如果你的配置文件真的是这种格式:

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)