2012-02-25 5 views
1

すべてのソースファイルにディレクトリ名を付けるのを避けるため、Makefileにvpathを使用しようとしています。しかし、私はそれが適切に動作するようにすることはできません。 SRCディレクトリが正しく含まれているMakefileのvpathがヘッダーファイルで機能しない

CC=gcc -Wall 

vpath %.h include 
vpath %.c src 

all: main.c Event.o Macros.h 
     $(CC) $< Event.o -o test/a.out 

Event.o: Event.c Event.h Macros.h 
     $(CC) -c $< -o [email protected] 

は、ここでのMakefileです。つまり、Event.cファイルはgccによって検出されます。しかし、Event.hとMacros.hはどちらもそうではありません。 gccでEvent.cのコンパイル時に両方のファイルが見つからないというエラーが表示されます。

私は自分のCファイルの#includeディレクティブを一度にこれらのそれぞれに変更しようとしました。

#include "Event.h" /* doesnt work */ 
#include <Event.h> /* doesnt work */ 
#include "../include/Event.h" /* works */ 

この問題をお手伝いできますか?実際のMakefileがこれよりも大きいので、すべてのソースファイルの前にディレクトリ名を使用することを避けたい。

答えて

7

vpathディレクティブは、Makeが依存関係を見つける方法のみを制御します。 GCCの仕組みには何ら影響しません。あなたには、いくつかの他のディレクトリにヘッダを持っている場合は、明示的-IでGCCを伝える必要があります:

INCLUDE := include 

$(CC) -I$(INCLUDE) $c $< -o [email protected] 
+0

プロジェクトに含まれるに基づいて作成GCC解決されたパスを参照する方法はありますか? '-M -MG'は私が望むことを行います。つまり、エラーは無視されますが、解決されたパスは表示されません。 – Royi