如何将自动变量传递给makefile中的shell?

时间:2015-08-27 15:01:38

标签: shell variables makefile conditional

我正在尝试编写条件编译规则。如果源文件包含两个连续的美元符号,我想要执行额外的步骤(下面的latexMathToWeb)。问题是自动变量$<没有被传递给shell(因此grep想要从stdin读取)。到目前为止,这是我的规则:

%.xml   : %.q
ifeq ($(shell grep \\$$\\$$ $< ; echo $$?),0)
    echo building math containing xml for $*...
    quiz2xml $< | latexMathToWeb > $@
else
    echo building non math xml for $*...
    quiz2xml $< > $@
endif

我目前通过使用一个简单的shell脚本来做出决定并进行构建来解决这个问题,但是如果我可以在makefile中完成所有工作,那就更好了。

1 个答案:

答案 0 :(得分:0)

你的背景和时间很混乱。

您正在尝试使用make parse-time构造ifeq$(shell)来执行配方执行时操作。你不能这样做。

使用普通的shell if语句将整个test / conditional移动到shell。

%.xml   : %.q
        if grep \\$$\\$$ $<; then \
            echo building math containing xml for $*...; \
            quiz2xml $< | latexMathToWeb > $@; \
        else \
            echo building non math xml for $*...; \
            quiz2xml $< > $@; \
        fi