【问题标题】:Limiting Make's @echo command限制 Make 的 @echo 命令
【发布时间】:2014-10-17 16:04:08
【问题描述】:

我正在尝试编写一个依次调用两个宏的 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 ...) 宏中也不起作用。

你知道应该怎么做吗?

【问题讨论】:

    标签: macros makefile


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 由于某种原因我第一次尝试时分号对我不起作用,但这有效。谢谢
    • 它肯定会起作用:funcc = $(call funca,$1) ; $(call funcb,$1)。它不起作用的唯一方法是,如果 funcafuncb 或传递给 funcc 的参数中的引用是错误的,并且分号被引用,因此 shell 看不到它。跨度>
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2015-12-19
    • 2021-12-04
    • 2015-04-04
    • 2013-02-12
    相关资源
    最近更新 更多