2012-03-20 77 views
0

我在makefile文件格式由程序产生依赖性,即排序文件名基于依赖

dependent_resource: dependency1 dependency2 

但是我最终PROGRAMM,结合这些资源实际上需要依赖的顺序文件,即列表所有依赖关系必须在依赖资源之前提供。

是否有任何工具可以使用这些makefile依赖文件并对资源列表进行排序以便稍后由编译器进行处理?

编辑

相关文件被一个简单的变换将无法正常工作,因为我有一个依赖文件的每个资源和依赖性可能会出现在文件中多次(如依赖于不同的资源)。

最好的方法很可能是直接从make本身获得依赖关系。它必须隐含地提供依赖关系,因为它将以我需要稍后提供的相同顺序构建依赖关系。但我不知道从运行make中提取它们的方法。

+0

http://en.wikipedia.org/wiki/Topological_sorting – 2012-03-20 18:51:03

+0

@MДΓΓБДLL:是的,我知道的算法非常好。然而,在GNU Make中实现它并不是一件有趣的练习。也就是说,为什么我在寻找一个外部工具,它实现了算法和依赖文件的解析。 – LiKao 2012-03-20 19:27:23

回答

1

你可以使用Make自己。假设你的依赖文件被称为dependencyFile。然后运行这个Makefile:

EVERYTHING := $(shell cat dependencyFile | sed 's/:/ /') 

all: $(EVERYTHING) 
    @ 

%: 
    @echo [email protected] 

include dependencyFile 
+0

不幸的是,这不会工作,因为我有多个依赖文件和文件可能会在不同的文件中多次提到。此外,您发布的当前命令会将依赖资源放在依赖关系之前。不过,我需要依赖关系之后(通过更改'sed'语句重新排序依赖关系,可以很容易地修复该部分)。 – LiKao 2012-03-20 19:39:09

+0

@Likao,你应该提到一开始你有一个以上的依赖关系列表,但很容易使这种方法适应多个文件。让我们先让另一部分工作;我*测试过*,并在“依赖资源”之前打印依赖关系。尝试一下。如果我们能够就此达成一致,那么我可以编辑我的答案以获得多个文件。你有什么格式的文件名列表? (我怀疑你有一些具体的想法。) – Beta 2012-03-20 19:51:20

+0

对我来说'echo“dependent_resource:dependency1 dependency2”| sed's /:/ /''产生'dependent_resource dependency1 dependency2',这是错误的顺序。正如我所说的,这很容易使用'sed's/\([^:] * \):\(。* \)/ \ 2 \ 1 /''来修复。文件列表可以通过make中的一些变量获得。 – LiKao 2012-03-20 19:57:18