使用awk动态设置makefile变量

时间:2012-09-21 21:05:11

标签: makefile awk

我的makefile中定义了一个变量停止点。 我想使用awk的输出来设置这个变量来自我的Makefile。

我想看看第二个参数是否为主

我试过了:

stoppoint = $(awk '$$2 ~ /main/ {print $$1}' file)  
stoppoint = "$(awk '$$2 ~ /main/ {print $$1}' file)"  
stoppoint = 'awk '$$2 ~ /main/ {print $$1}' file'
awk '$$2 ~ /main/ {print $$1}' file > stoppoint
awk '$$2 ~ /main/ {print $$1}' file > $(stoppoint)

但是,我无法设置此变量。 请告诉我如何在Makefile中使用awk设置变量

PS:在命令行上,awk命令为我提供了我想要的输出......

谢谢, 特加斯

5 个答案:

答案 0 :(得分:5)

你必须使用法语引号(``)

以下是一个例子:

all:
    @a=`echo "hello world!!" | awk '{print $0;}' -`; echo $$a;

答案 1 :(得分:1)

解决方案很简单: Makefile采用格式

目标:在TAB

之后的操作跟随下一行的依赖关系

在上述情况下,我们无法在TAB之后的下一行设置变量,因为它假定它是一个动作。只需删除TAB并进行设置即可。 这将解决问题

答案 2 :(得分:1)

您需要使用eval这样的结构:

.PHONY: default
default: all

rule1:
    $(eval GLOBAL_VAR=`awk '$$2 ~ /main/ {print $$1}' file`)

all: rule1
    @echo "The global var is: $(GLOBAL_VAR)"

eval将字符串计算为makefile语法。在这里,它将GLOBAL_VAR变量设置为shell函数调用的结果,然后在另一个规则中将其打印出来以说明它是全局的。

答案 3 :(得分:0)

现在我的方式是:

@awk '$$2 ~ /main/ {print $$1}' inputfile > DUMP

它在转储

中为我提供了值0x60000078

使用它:

@echo -e "set pc $(shell cat DUMP)" > testfile

这似乎解决了我的问题,但我希望有人能指出我更好的解决方案。

谢谢,

特加斯

答案 4 :(得分:0)

我需要解决此问题的方法是在调用shell时使用关键字awk,如下所示:

VARIABLE="$(shell awk '__awk script__' file-awk-processes)"

希望它有所帮助!