2015-08-27 133 views
0

我想写一个条件编译规则。如果源文件包含两个连续的美元符号,我想要执行一个额外的步骤(latexMathToWeb)。问题是自动变量$ <没有被传递给shell(所以grep想要从stdin读取)。这里是我的规则至今:如何将自动变量传递给makefile中的shell?

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

我现在有这个问题,通过使用一个简单的shell脚本来作出决定,做构建解决,但它会更好,如果我能做到这一切在makefile。

回答

0

你有你的背景和时间困惑在这里。

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

改为使用正常shell if语句将整个测试/条件移动到shell。

%.xml : %.q 
     if grep \\$$\\$$ $<; then \ 
      echo building math containing xml for $*...; \ 
      quiz2xml $< | latexMathToWeb > [email protected]; \ 
     else \ 
      echo building non math xml for $*...; \ 
      quiz2xml $< > [email protected]; \ 
     fi 
+0

缺少续行使我几秒钟,但我从你的原始答案中找出它。非常感谢!现在看起来很明显。 – user13430

+0

最初吹的道歉。真高兴你做到了。这种困惑发生了很多。事实上,我只是在前一天回答了另一个问题(不同情况)。 –

+0

也许这不是正确的地方问(我是新来的stackoverflow,你可以告诉),但为什么你会使用parse-time结构ifeq(例如),如果你可以只是交出条件的shell在运行时?也许不需要线路延续? – user13430

相关问题