3

我在我的 makefile 中定义了一个变量停止点。我想使用来自我的 Makefile 的 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 命令给了我我想要的输出......

谢谢,光辉

4

6 回答 6

5

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

这是一个例子:

all:
    @a=`echo "hello world!!" | awk '{print $0;}' -`; echo $$a;
于 2012-09-21T21:16:59.540 回答
2

您需要使用这样的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 函数调用的结果,该结果又在另一个规则中打印出来以说明它是全局的。

于 2015-06-09T22:10:36.303 回答
1

解决方案很简单:Makefile 假定格式

目标:依赖关系在下一行之后是 a 之后的操作TAB

在上述情况下,我们不能在 a 之后的下一行设置变量,TAB因为它假定它是一个动作。只需删除TAB并设置它。那将解决问题

于 2012-09-24T21:22:05.930 回答
0

现在我这样做的方式是:

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

0x60000078在转储中给了我一个价值

并使用它:

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

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

谢谢,

光辉

于 2012-09-21T23:07:24.733 回答
0

在 makefile 中使用 awk 的另一种选择是使用 $$:

VERSION=`awk '/version:/{print $$NF}' charts/Chart.yaml`
于 2022-01-06T14:26:40.083 回答
0

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

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

希望能帮助到你!

于 2017-11-07T12:46:02.773 回答