我的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命令为我提供了我想要的输出......
谢谢, 特加斯
答案 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)"
希望它有所帮助!