2017-01-10 7 views
0

以下の2つのファイルがあります(treeコマンドから)。Makefileでは、VPATH変数によって設定されたすべてのパスのファイルに対してワイルドカード機能を動作させる方法

. 
|-- Makefile 
|-- dir1 
| `-- file1.c 
`-- dir2 
    `-- file2.c 

私はdir1とdir2ディレクトリのファイルをコンパイルしたかったので、以下のようにMakefileを書きました。

VPATH = dir1:dir2 
CFILES := ${wildcard *.v} 
$(info CFILES = ${CFILES}) 

出力:

CFILES = 

のでwildcar機能が自動的にVPATH変数によって設定されたパスを検索しません。
パスをワイルドカード機能で明示的に書き込むと、機能します。

CFILES := ${wildcard dir1/*.c dir2/*.c} <== this makes it work 
$(info CFILES = ${CFILES}) 

出力:

CFILES = dir1/file1.c dir2/file2.c 

私はMakefileのにのみ、既存のパスを追加したいが、私はVPATHが設定したパスにワイルドカード機能を使用することができる方法はありますか?

+0

あなたはそうではないようです。詳細はこちらhttp://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make –

答えて

0

Makeのテキスト変換関数を使用して、ディレクトリのリストを目的のワイルドカードコマンドに変換することができます。これは、ファイルリストを必要とするので、ファイルリストを削除する必要があります。 GNU Make manualを見ると、VPATHのディレクトリを抽出して使用しています。

ワイルドカードを使用してファイルへの完全なパスを取得したので、VPATHを使用する必要はないようです。 IMHO、VPATHは悪い考えであり、よく設計されたビルドシステムはそれを使用しないでください。

また、同じ名前のファイルが異なるディレクトリに表示されている場合はどうしたらいいか考えてみてください!

関連する問題