Macros 限制制造';s@echo命令
我正在尝试编写一个Makefile宏,它一个接一个地调用两个宏。第一个宏回显某些内容,第二个宏调用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
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看不到它,则该函数将不起作用。