【问题标题】:Pass makefile automatic variable value to bash function called from make将makefile自动变量值传递给从make调用的bash函数
【发布时间】:2021-05-07 21:04:26
【问题描述】:

假设我在.bashrc 中定义了以下函数:

foo (){
    touch $1
    }

我想像这样在 makefile 中调用这个函数:

%.png : %.tex
    bash -i -c foo $<

但这抱怨缺少操作数。 (错误是“touch: missing file operand”,所以它正在调用touch...)。我已经看到了一些类似问题的解决方案,但它们并不适用,因为我需要将自动变量 $&lt;(或者更确切地说,它的值)作为参数传递给 shell 脚本。

我知道我可以解决这个问题(例如,将函数批量复制到 makefile 中),但我很想知道如何在 makefile 中解决我的问题。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    您的问题是可能,因为您没有足够的报价。 shell -c 选项将其脚本作为单个参数

    考虑:

    $ bash -c echo hi
    <prints nothing>
    

    对比:

    $ bash -c 'echo hi'
    hi
    

    【讨论】:

    • 我不能引用 bash 的参数,因为我需要 make 来解释 $&lt;。但我明白这是问题的一部分。
    • 不,你没有。 Make 不关心引号。 Make 甚至不知道 如何 解释 shell 脚本以正确处理引用。 Make 总是扩展配方中的每个$,除非它通过$$ 转义。唯一需要担心的变量是 shell 变量,而不是 make 变量; $&lt; 是一个 make 变量。尝试一下。它会起作用的。
    • 哦,没错,如果我真的从我的 makefile 中删除了另一个错误,它会完美地工作! (我的测试脚本是 touching 依赖文件,而不是所需的输出,所以看起来什么也没发生。(应该是 foo $@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多