2012-03-06 12 views
1

を実行しているように見える:私はMakefileのと同じレベルでmakeを実行するとMakefileの異常: `make`を起動し、それは私には、以下のMakefileを持っている別のmakefile

OBJDIRS  = Runtime/Core/Common Runtime/Core/Graphic/SymbolXLib Runtime/Core/Map Runtime/Core/SymbolDictionary \ 
       Runtime/CoreClient/RuntimeCoreJava 
OBJS   = $(wildcard $(OBJDIRS:=/*.o)) 
TARGETA  = libRuntimeCoreJava.a 
TARGETD  = libRuntimeCoreJava.so 
TARGETD1  = $(TARGETD).1 
TARGETD2  = $(TARGETD).1.0 
TARGETD3  = $(TARGETD).1.0.0 
AR   = ar cqs 
LINK   = g++ 
SYMLINK  = ln -f -s 
LDFLAGS = -shared -Wl,-soname,libRuntimeCoreJava.so.1 

all : $(TARGETD) $(TARGETA) 

$(TARGETD) : $(OBJS) 
     echo "Building Dynamic Lib using "$(OBJS) 
     #$(CXX) $(LDFLAGS) $(OBJS) 
     #$(SYMLINK) $(TARGETD) $(TARGETD1) 
     #$(SYMLINK) $(TARGETD) $(TARGETD2) 
     #$(SYMLINK) $(TARGETD) $(TARGETD3) 

$(TARGETA) : $(OBJS) 
     echo "Building Static Lib using "$(OBJS) 
     #$(AR) $(TARGETA) $(OBJS) 

とは関係のない別のメイクファイルを呼び出すように見えますこれです。

In file included from Runtime/Core/Common/JNICallback.cpp:16: 
Runtime/Core/Common/stdafx.h:33:17: error: log.h: No such file or directory 
Runtime/Core/Common/stdafx.h:34:23: error: Namespace.h: No such file or directory 
Runtime/Core/Common/JNICallback.cpp:18:25: error: JNICallback.h: No such file or directory 
make: *** [Runtime/Core/Common/JNICallback.o] Error 1 

あなたは私だけでも、すでにコンパイルされたオブジェクトファイルを取って、静的および動的ライブラリにそれらを入れて、任意のソースを構築しておりません見ることができるように。なぜソースをコンパイルしようとしていますか?以下は私のディレクトリ構造です。

[[email protected] src]$ ls -l 
drwxrwxr-x 2 matt6809 matt6809 4096 Mar 2 11:47 binDebug 
drwxrwxr-x 2 matt6809 matt6809 4096 Feb 15 13:31 binRelease 
drwxrwxr-x 2 matt6809 matt6809 4096 Feb 22 11:03 include 
drwxrwxr-x 2 matt6809 matt6809 4096 Mar 5 10:55 libDebug 
drwxrwxr-x 2 matt6809 matt6809 4096 Feb 15 11:25 libRelease 
-rw-rw-r-- 1 matt6809 matt6809 824 Mar 6 15:48 Makefile 
drwxrwxr-x 5 matt6809 matt6809 4096 Feb 14 16:03 Runtime 
drwxrwxr-x 6 matt6809 matt6809 4096 Feb 14 16:43 System 

私はmakefileと同じディレクトリにいると確信しています。何がありますか?

+1

'make -f。/ Makefile'が正しいものを使用していることをさらに確実にするとどうなりますか? – blahdiblah

+0

同じことが起こりますが、wierdコンパイルが消える唯一の時間は、OBJS = $(ワイルドカード$(OBJDIRS:=/*。o))行を削除したときです。私は行方不明の旗がありますか?オブジェクトファイルは何とか再コンパイルする必要がありますか?ワイルドカードを削除して単一のオブジェクトファイルに置き換えると、うまく動作します。 –

+0

OBJSが絶対パスであることを意味しましたか? '$(OBJDIRS:=。/ *。o)'があなたが本当に探しているものかもしれません。 – blahdiblah

答えて

2

ターゲットには、オブジェクトファイルが前提条件となっています(オブジェクトファイルはその時点でそのディレクトリに存在しています)。オブジェクトファイルはすでに存在していますが、Makeはそれらが期限切れであるかどうかを確認して再構築する必要があります。オブジェクトファイルをチェックして、それより新しいソースファイルを見つけて、オブジェクトを再コンパイルしようとしたときに、ヘッダーファイルが見つからない場合は、表示されているようなエラーメッセージが表示されます。遊びに別のメイクファイルの証拠はありません。

これに対処するにはいくつかの方法があります。 最も簡単な方法は、おそらく、ソースファイルをMakeを実行するディレクトリ(またはその逆)から移動することです。

EDIT:ビルトインルールを無効にするmake -rを使用します。
@eriktousは、より良い方法を指摘しています。

+0

Makefileのどの部分でソースを再構築しようとしていますか?あなたが見ることができるように、私はコンパイルされた行のコメントを外していますか? –

+1

@MatthewHoggan:Makeは組み込みのパターンルールを使用します。 '-r'スイッチで無効にすることができます。 – eriktous

+0

この機能を無効にする方法はありますか? –