Macros 限制制造';s@echo命令

Macros 限制制造';s@echo命令,macros,makefile,Macros,Makefile,我正在尝试编写一个Makefile宏,它一个接一个地调用两个宏。第一个宏回显某些内容,第二个宏调用gcc。问题是,make扩展了这两个宏,结果是,gcc命令只是回显而不运行 下面是一个例子: funca = @echo "foo $1" funcb = gcc --version funcc = $(call funca,$1) $(call funcb,$1) all: $(call funcc,"bar") 我得到的输出是foobargcc--version,但我想要的是foob

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

下面是一个例子:

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

all:
    $(call funcc,"bar")
我得到的输出是
foobargcc--version
,但我想要的是
foobar
gcc--version
的实际输出(最好是在新行上)。用换行符和反斜杠打断宏没有任何好处,将
gcc
命令包装在
$(shell…
宏中也不起作用


你知道该怎么做吗?

我不知道你为什么要这样做,但是如果你想在同一个配方命令行中运行多个shell命令,你必须用某种shell分隔符来分隔它们,比如
&&

$(调用func,“bar”)
的结果是字符串
echo“foo”bar“gcc--version
,因此这是发送到shell的命令。如果您在shell中键入它,您将看到它将只打印字符串
foobargcc--version
,正如您所期望的那样

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

funcc = $(call funca,$1) && $(call funcb,$1)

由于某种原因,我第一次尝试使用分号时,分号对我不起作用,但它确实有效。ThanksIt肯定会起作用:
funcc=$(调用funca,$1)$(调用funcb,$1)
。如果
funca
funcb
内的引号,或传递给
funcc
的参数中的引号错误,并且分号被引用,因此shell看不到它,则该函数将不起作用。