我正在尝试编写一个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 bar
和gcc --version
的实际输出(最好是在新行上)。使用换行符和反斜杠打破宏没有任何好处,将gcc
命令包装在$(shell ...)
宏中也不起作用。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
我不确定你为什么要这样做,但是如果你想在同一个配方命令行中运行多个shell命令,你必须用某种shell分隔符将它们分开,例如;
或{ {1}}。
&&
的结果是字符串$(call funcc,"bar")
,因此这是发送到shell的命令。如果你在shell中输入它,你会发现它只会打印字符串echo "foo "bar"" gcc --version
,就像你期望的那样。
如果要运行多个命令将它们分开;例如:
foo bar gcc --version