2012-12-16 10 views
20

のリストを取得します。ワイルドカードは、私が他のディレクトリに存在するすべてのディレクトリのリストを取得する必要があり、私のMakefile内のすべてのディレクトリ

私が使用して私のMakefileと同じフォルダ内のすべてのディレクトリのリストを取得するには:

DIRECTORIES = $(wildcard */) 

all: 
    echo $(DIRECTORIES) 

正常に動作し、私の希望リストを与えます。私は

DIRECTORIES = $(wildcard ../Test/*/) 

all: 
    echo $(DIRECTORIES) 

を使用して別のディレクトリ内のすべてのディレクトリのリストを持っているしたい場合は、私は.h.cppファイルを含むそのディレクトリに(パスを持つ)すべてのファイルのリストを取得します。

この問題が発生し、それを修正する方法をなぜ任意の提案ですか?リストを入手するための他のソリューションも歓迎します。

+0

あなたはワイルドカードは良いアイデアですか? –

+0

@ JonathanLefflerもっと大きなプロジェクトなので、私は手動ですべてのディレクトリを追加したくありません。それにもかかわらず、ワイルドカードを避ける方法がある場合は、教えてください。あなたはこの動作を見ている – Haatschii

+0

理由はGLIBCのバージョンのバグです:https://sourceware.org/bugzilla/show_bug.cgi?id=10278 – MadScientist

答えて

27

使用sortdir機能を一緒にwildcardと:

$(DIR名...) 抽出物中の各ファイル名のディレクトリ部分:

DIRECTORY = $(sort $(dir $(wildcard ../Test/*/))) 

GNUからマニュアルを作ります名前。ファイル名のディレクトリ部分は、その中の最後のスラッシュを含むすべてのものです。ファイル名にスラッシュが含まれていない場合、ディレクトリ部分は文字列 './'です。 が重複した単語を削除する、辞書順にリストの単語をソート(並べ替えリスト)

$。出力は、単一のスペースで区切られた単語のリストです。

はまた、この記事では第二と第三の方法を見て:Automatically Creating a List of Directories

+2

うん、それは仕事をする。どうもありがとう。 – Haatschii

+0

これは私にとって不必要に複雑なようです。なぜ私はあなたが 'ソート 'する必要があるのか​​分かりません。 (最後の文字がスラッシュでないことを確認するために、 '.'末尾に追加するノートを)' '$(DIRの$(ワイルドカード../テスト/ * /)。)と、それはどこでも動作します:あなたが使用することができます。 – MadScientist

+0

@MadScientist、 'sort'は、ディレクトリがアルファベット順にトラバースされることを保証します。これは、ビルドの進捗状況などを一目で把握できるようにする場合に便利です。私がそれを省略したとき、私はWindows上で、ディレクトリはアルファベット順に横断されていたが、Linuxではそうではなかったことがわかった。 – Alan

15

試してみてください。

$(shell find <directory> -maxdepth 1 -type d) 

サブディレクトリに行かなくても、あなたに与えられたディレクトリ内のディレクトリのリストを提供します。それが記載されている全てのディレクトリの前に../が含まれますので、あなたはそのリストをクリーンアップする必要があるかもしれません。

+6

は、あなたが使用することができます '' 'せずにリストを取得するには-mindepth 1 -maxdepth 1'である。 –

関連する問題