使用awk动态设置makefile变量

使用awk动态设置makefile变量,makefile,awk,Makefile,Awk,我在makefile中定义了一个变量stoppoint。 我想使用awk的输出设置这个变量 我想看看第二个论点是否主要 我试过: 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 $$

我在makefile中定义了一个变量stoppoint。 我想使用awk的输出设置这个变量

我想看看第二个论点是否主要

我试过:

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命令给了我想要的输出

谢谢,
Tejas

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

以下是一个例子:

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

现在我的做法是:

@awk '$$2 ~ /main/ {print $$1}' inputfile > DUMP
它给我一个值
0x60000078
内部转储

使用它:

@echo -e "set pc $(shell cat DUMP)" > testfile
这似乎解决了我的问题,但我希望有人能给我一个更好的解决方案

谢谢

Tejas

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

目标:依赖项在下一行的
选项卡之后的操作

在上述情况下,我们无法在
选项卡
后的下一行中设置变量,因为它假定它是一个操作。只需删除
选项卡
,然后进行设置。
这将解决问题

您需要使用一个
eval
结构,如下所示:

.PHONY: default
default: all

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

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

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

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

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

希望有帮助

您好,它不起作用:(我使用:@a=
awk'$$2~/main/{print$$1;}文件
;echo$$a。它说:a:未找到命令,当我之前将a定义为a=0时。当我不定义它时,它仍然失败:(.当然,带法语引号。我使用的是一个='awk'…'文件'。我在ubuntu中使用bash。你能给我一个文件示例和所需的输出吗?你是在Makefile中完成的吗?1.你不能使用“$1”,您必须使用$$1等。2.它不允许我动态设置变量。一般来说,在Makefile中动态设置变量的过程是什么?使用bash它可以工作,但我希望它在Makefile中工作,这会改变很多规则,我猜我的示例是在Makefile
all:@a=…
中,我怀疑您的问题是Makefile中的每一行都会调用一个新的shell。因此,如果在一行中分配变量,则不会在下一行中定义该变量,因为该命令将在新的shell中运行。这似乎是一个合法的推理!我也会尝试一下。谢谢:)