2012-03-20 7 views
0

私はしかしは、並び替え、ファイル名

dependent_resource: dependency1 dependency2 

すなわち、実際にこれらのリソースを組み合わせて、依存関係の順序でファイルを必要とする私の最後のプログラムの開発、すなわち、メイクファイル形式でプログラムによって生成された依存関係のリストを持っている依存関係に基づいて、すべての依存関係は、従属リソースの前に提供する必要があります。

これらのmakefile依存ファイルを使用して、後でコンパイラによって処理されるリソースのリストをソートするツールはありますか?

EDIT

私は、各リソースと依存関係の依存ファイルは、(異なるリソースの依存関係など)のファイルに複数回表示されることがあります持っているので、依存ファイルの単純な変換は、動作しません。

最も良い方法は、おそらくmake自体からの依存関係を直接取得することでしょう。それは後でそれらを提供する必要がある同じ順序で依存関係を構築するので、少なくとも暗黙のうちに利用可能な依存関係を持たなければなりません。しかし、私は実行中のmakeからそれらを抽出する方法を知らない。

+0

http://en.wikipedia.org/wiki/Topological_sorting –

+0

@MДΓΓБДLL:はい、私は非常によくアルゴリズムを知っています。しかし、GNU Makeで実装するのは楽しいことではありません。つまり、アルゴリズムと依存ファイルの解析を実装する外部ツールを探しているのはなぜですか。 – LiKao

答えて

1

Make自体を使用できます。あなたの依存ファイルがdependencyFileと呼ばれるとします。そして、このメイクファイルを実行します。

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

all: $(EVERYTHING) 
    @ 

%: 
    @echo [email protected] 

include dependencyFile 
+0

残念ながら、私は複数の依存関係ファイルを持っているので、これはうまくいきません。ファイルは別のファイルに複数回記述されている可能性があります。また、あなたが掲示した現在のコマンドは依存関係の前に依存リソースを置きます。しかし、私は依存関係の後にそれを必要とします(その部分は 'sed'文をreorder依存関係に変更することで簡単に修正できます)。 – LiKao

+0

@LiKao、最初に依存関係のリストが複数あると述べておきますが、この方法を複数のファイルに適用するのは簡単です。最初に他の部分を動かしてみましょう。私はこれをテストして、 "依存リソース"の前に依存関係を表示します。それを試してみてください。私たちがこれに同意できれば、私は複数のファイルの回答を編集できます。どのような形式でファイル名のリストがありますか? (私はあなたが何かを念頭に置いていると思う) – Beta

+0

私のために 'echo" dependent_resource:dependency1 dependency2 "| sedの/://''は 'depend_resource dependency1 dependency2'を返します。これは間違った順序です。私が言ったように、これは 'sed 's/\([^:] * \):\(。* \)/ \ 2 \ 1 /''を使って簡単に修正できます。ファイルのリストは、make内のいくつかの変数を通して利用できます。 – LiKao

関連する問題