2011-01-16 1 views
1
##################################################################### 
# This is the filesystem makefile "make_BuddyAlloc". 
# Author:Michael Gomes 
# Date:2 jan 2011 
###################################################################### 

#variable defination 
CC = gcc 
CFLAGS = -g -O2 
SRC_DIR=src 
INC_DIR=inc 
OBJ_DIR=obj 

#List of source files 
SOURCE= buddyMain.c \ 
    Copy.c \ 


#List of object files 
OBJECTS=$(addprefix $(OBJ_DIR)/,$(SOURCE:.c=.o)) 

#BuddyAlloc is dependent on "obj/*.o". 
BuddyAlloc : $(OBJECTS) 
$(CC) $(CFLAGS) -o BuddyAlloc $< 

#obj/*.o depends on src/*.c and inc/*.h, we are redirecting the object files to obj folder 
$(OBJECTS):$(SRC_DIR)/$(SOURCE) 
$(CC) $(CFLAGS) -I$(INC_DIR) -o $(OBJ_DIR)/$(OBJECTS) -c $< 


#Cleans all the *.exe files 
clean: 
rm -f *.exe 

と間違っていることINCフォルダの下に含まれており、オブジェクトファイルは、上記の.given OBJフォルダに保存されているが、私は私のミニプロジェクトのために作成しようとしていますメイクファイルです。 'obj/buddyAlloc.o'が必要とするターゲット 'Copy.c'を作成するためのルールはありませんが、それはうまくいきます。私は何をしましたか?いただきました私は、srcフォルダの下にソースファイルを保持している私のメイク

+0

SOURCEリストのCopy.cの後にあるようなバックスラッシュを注意してください。この場合、あなたは問題ありませんが、通常、リストをバックスラッシュで終わらせないようにしてください。 –

答えて

4

この行は問題です:$(OBJECTS):$(SRC_DIR)/$(SOURCE)。結果として得られる依存関係の文字列(コロンの右側)はsrc/buddyMain.c Copy.cです。言い換えれば、ソースディレクトリの前に追加しようとしていますが、最初のファイルの前に追加されています。

  1. マニュアルアプローチ:

    SOURCE = $(SRC_DIR)/buddyMain.c $(SRC_DIR)/Copy.c

  2. VPATH、すべての検索パスにディレクトリを追加します

    http://www.gnu.org/software/make/manual/make.html#General-Searchを参照)

    は、この問題を解決するための多数の方法があります。 VPATH = src

  3. あるいは、既にMakefileで使用されるように、SOURCEから構築された新しい変数 を紹介する 使用addprefix

    SRCS = $(addprefix $(SRC_DIR)/,$(SOURCE))

+0

正しい診断ですが、推奨される治療法は何ですか? –

+0

@Jonathan - いくつかの救済策を追加するように編集しました。 – EmeryBerger

+0

彼のコマンドは '$(OBJECTS)'に '$(addprefix')でディレクトリが追加されているので、' -o $(OBJ_DIR)/ $(OBJECTS) 'を使用すべきではありません。 Cコンパイラがそのようなオブジェクトを吐き出すことはできません。パターンルールを使用するのはなぜですか? –

1

あなたはとにかくあなたのMakefileでGNUismsを使用して、なぜですパターンルールを使用するだけではありませんか?

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c 
    $(CC) $(CFLAGS) -I$(INC_DIR) -c -o [email protected] $< 
関連する問題