Makefile:获取命令输出并在规则中使用它

时间:2016-05-02 11:29:47

标签: shell dynamic makefile command rules

我的命令获取在参数中传递的文件的依赖项,现在,我想将它像依赖项一样用于Makefile。我做了一些想法:

%.dep: %.txt
./mycommand filedepend ${<} > $@

#Tex compilation
$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep $(eval $(shell cat %.dep))
    ./mycommand export --to="latex" --path="${<}" $<
    rm $*.dep

它不起作用,规则的结果应该是:

$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep foo.txt bar.txt
    ./mycommand export --to="latex" --path="${<}" $<
    rm $*.dep

但是对于独立文件(我希望所有文件都有一条规则)

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式生成依赖项文件:

$(OUTPUTDIRECTORY)/%.tex.json: foo.txt bar.txt

而不仅仅是

foo.txt bar.txt

然后包含依赖项文件:

-include %.dep

减号用于在依赖项文件尚不存在时忽略初始包含错误。您可以尝试省略它时会发生什么,它也可以工作。

完整的例子,没有经过测试,也许我错过了什么,但基本上这应该有效:

 -include %.dep
 %.dep: %.txt
    ./mycommand filedepend ${<} > $@   # <-- this must generate the dep file in the correct format


#Tex compilation
$(OUTPUTDIRECTORY)/%.tex.json: %.txt %.dep
    ./mycommand export --to="latex" --path="${<}" $<
    rm $*.dep

这是一个很好的资源,解释了使用gcc生成自动依赖关系,只需用自定义依赖关系生成器替换gcc:http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/