2016-09-26 123 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,但你永遠不定義它。您需要多一行:

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