2012-03-20 74 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