2016-09-26 5 views
1

私はmakefileを作ろうとしました。私は次のフォルダ構造を持っています。Makefileでソースファイルが見つかりません

Source 
    - include 
    - My headerfiles 
    - objects 
    - The object files 
    - src 
    - My source files 

私の問題は、srcディレクトリ内のソースファイルが見つかりません。

私のmakeファイルは次のように見えます。

# gcc for C 
# g++ for c++ 
CC = gcc 

#compiler flags 
# -g adds debugging information to the executebells 
# -Wall 
CFLAGS = -g -Wall 

#target 
TARGET = gabe_the_dog_server 
#directory for the object files 
OBJDIR = ./objects 
SRCDIR = ./src 

default: $(TARGET) 
all: default 

HEADERS = $(wildcard include/*.h) 
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HEADERS) 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) $(CFLAGS) $(LIBS) -o $(OBJDIR)/[email protected] 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

clean: 
    -rm -f *.o 
    -rm -f $(TARGET) 

答えて

0

を:

OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 

あなたは変数SOURCESを使用しますが、あなたはそれを定義することはありません。もう1行必要です:

SOURCES = $(wildcard $(SRCDIR)/*.c) 
OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 
0

代わりにソースファイルへのパスを使用するのでは、あなたがVPATHという名前の特別な変数にこのパスを置くことをお勧めします。次に、あなただけのように、ソースファイルに言及:

OBJDIR = ./obj 
SRCDIR = ./src 
VPATH = $(SRCDIR) 
OBJECTS = $(addprefix $(OBJDIR)/, foo.o bar.o) 

all: $(OBJECTS) 

$(OBJDIR)/%.o: %.c 
$(cc) ... 

GNU makeは、ターゲットの前提条件となるファイルのためのVPATHに存在するフォルダになります。同じファイル名を複数回見つけられる複数のフォルダがある場合は、これが問題になる可能性があることに注意してください。

GNU make VPATH manualを参照してください。あなたはVPATHグッドプラクティスの追加の例が必要な場合は、同様にこのリンクを参照してください。ここでMad Scientist: How not to use VPATH

関連する問題