2016-05-02 26 views
0

我的命令获取传入参数中的文件的依赖关系,现在,我想将它像依赖关系一样用于Makefile。我不喜欢somethink:Makefile:获取命令输出并在规则中使用

%.dep: %.txt 
./mycommand filedepend ${<} > [email protected] 

#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 

但对于独立的文件(我想对所有文件一个规则)

+0

您可以在调用make之前计算依赖项列表,将其放入环境变量中,并在您的依赖项列表中使用此变量。顺便说一句,因为有许多不同的* make *可用,你应该总是在这样一个问题中指定,你正在使用哪个'make'。 – user1934428

回答

1

你可以用这样的方式生成你的依赖文件:

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

而不是只有

foo.txt bar.txt 

,然后包括与相关文件:

-include %.dep 

减号是忽略了最初的包括错误时,依赖文件尚未存在。你可以尝试当你忽略它时会发生什么,它也可以工作。

完整的例子,没有测试过,也许我失去了一些东西,但基本上这应该工作:

-include %.dep 
%.dep: %.txt 
    ./mycommand filedepend ${<} > [email protected] # <-- 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/