2014-10-10 69 views
0

我想写一个与相关的预先依赖的make规则。GNU使相互依赖的前提

a: b $(FILES) 

b: $(FILE_1) 
    $(eval FILES := some_function_using_file($(FILE_1))) 

$(FILES): 
    do something ... 

基本上,我需要$(FILE_1)来获得$(FILES)。当在文件中进行第一次读取时,下面的这个规则不存在,因为$(FILES)最初没有被定义,而是被动态评估。

$(FILES): 
    do something ... 

有没有办法让这项工作?我想动态创建$(文件),然后运行它的规则。

回答

0

目标在任何运行之前都会被评估。您最好的选择是在发生这种情况之前生成列表。

FILES = $(shell ls) new.txt 

all: $(FILES) 

$(FILES): 
    echo [email protected] 

如果你真的很绝望,你可以从makefile中生成另一个makefile并调用make的另一个副本。

+0

或['include'](https://www.gnu.org/software/make/manual/html_node/Include.html)生成的makefile。 – reinierpost 2014-10-13 08:44:47

+0

包括在制定任何目标之前都会工作,但我认为您不能在OPs示例中的目标内执行此操作。 – 2014-10-13 12:07:48