2016-09-26 115 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