web-dev-qa-db-ja.com

すべてのディレクトリのリストを取得するワイルドカード

Makefileでは、他のディレクトリにあるすべてのディレクトリのリストを取得する必要があります。

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

DIRECTORIES = $(wildcard */)

all:
    echo $(DIRECTORIES)

これで問題なく動作し、希望のリストが表示されます。ただし、別のディレクトリ内のすべてのディレクトリのリストを使用する場合は、

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

all:
    echo $(DIRECTORIES)

.hおよび.cppファイルを含む、そのディレクトリ内のすべてのファイル(パス付き)のリストを取得します。

これが発生する理由と修正方法はありますか?リストを取得する他のソリューションも歓迎します。

30
Haatschii

sortおよびdir関数をwildcardと一緒に使用します。

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

From GNU make manual:

$(dir names ...)namesの各ファイル名のディレクトリ部分を抽出します。ファイル名のディレクトリ部分は、その中の最後のスラッシュまで(およびそれを含む)すべてです。ファイル名にスラッシュが含まれていない場合、ディレクトリ部分は文字列「./」です。

$(sort list)リストの単語を字句順にソートし、重複する単語を削除します。出力は、単一のスペースで区切られた単語のリストです。

この記事の2番目と3番目の方法もご覧ください。 ディレクトリのリストの自動作成

39
Lei Mou

試してください:

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

これにより、サブディレクトリに移動することなく、指定されたディレクトリ内のディレクトリのリストが表示されます。リストには、リストされるすべてのディレクトリの前に.および./が含まれるため、リストをクリーンアップする必要があります。

15
regulatethis

使用する:

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

これは正常に機能します。

2
yuanjianpeng