Makefile找不到源文件

时间:2016-09-26 09:47:34

标签: 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 $@

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) $(CFLAGS) $(LIBS) -o $(OBJDIR)/$@

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

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

2 个答案:

答案 0 :(得分:0)

建议您将此路径放在名为cannot convert string to json obj的特殊变量中,而不是使用源文件的路径。然后你只需提到你的源文件,如下所示:

VPATH

GNU OBJDIR = ./obj SRCDIR = ./src VPATH = $(SRCDIR) OBJECTS = $(addprefix $(OBJDIR)/, foo.o bar.o) all: $(OBJECTS) $(OBJDIR)/%.o: %.c $(cc) ... 将在make中查找目标先决条件的文件中的文件夹。请注意,如果您有多个文件夹,您可以找到多次相同的文件名,则可能会出现问题。

GNU make VPATH manual。如果您需要有关VPATH良好实践的其他示例,请参阅此链接:Mad Scientist: How not to use VPATH

答案 1 :(得分:0)

下面:

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

您使用变量SOURCES,但您从未定义它。你还需要一行:

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