限制Make的@echo命令

时间:2014-10-17 16:04:09

标签: macros makefile

我正在尝试编写一个Makefile宏,它一个接一个地调用两个宏。第一个宏回声,第二个宏回调gcc。问题是,make扩展了这两个宏,结果是gcc命令只是被回显而且没有运行。

以下是一个例子:

funca = @echo "foo $1"
funcb = gcc --version
funcc = $(call funca,$1) $(call funcb,$1)

all:
    $(call funcc,"bar")

我得到的输出是foo bar gcc --version,但我想要的是foo bargcc --version的实际输出(最好是在新行上)。使用换行符和反斜杠打破宏没有任何好处,将gcc命令包装在$(shell ...)宏中也不起作用。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要这样做,但是如果你想在同一个配方命令行中运行多个shell命令,你必须用某种shell分隔符将它们分开,例如;或{ {1}}。

&&的结果是字符串$(call funcc,"bar"),因此这是发送到shell的命令。如果你在shell中输入它,你会发现它只会打印字符串echo "foo "bar"" gcc --version,就像你期望的那样。

如果要运行多个命令将它们分开;例如:

foo bar gcc --version