Makefile:引用“src”目录中的源文件时出错

时间:2014-05-01 15:44:06

标签: makefile directory

[edit] - 答案是我错误地定义了include目录的路径。尴尬的错误。

我正在编写一个makefile,它在src目录中的.c文件中构建对象,并在include目录中包含头文件,并将它们存储在obj目录中,然后从这些对象构建和exe。玩具版本如下。

# Makefile

IDIR = ../include
CC = gcc
CFLAGS = -I$(IDIR) -Wall

SDIR = src
ODIR = obj

_SOURCES = main.c aux1.c aux2.c aux3.c
SOURCES = $(patsubst %,$(SDIR)/%,$(_SOURCES))

_OBJECTS = $(_SOURCES:.c=.o)
OBJECTS = $(patsubst %,$(ODIR)/%,$(_OBJECTS))

_DEPS = aux1.h aux2.h aux3.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

EXE = exefile

$(ODIR)/%.o: $(SDIR)/%.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

$(EXE): $(OBJECTS)
        $(CC) -o $@ $^ $(CFLAGS) 

.PHONY: clean

clean:
        rm *o $(EXE)

makefile所在的目录看起来像这样(当你的时候)

include  Makefile  obj  src  trash

当我输入make时,我收到以下错误

make: *** No rule to make target `obj/main.o', needed by `exefile'.  Stop.

我怀疑问题在于这一行

$(ODIR)/%.o: $(SDIR)/%.c $(DEPS)

我试图通过在src /中引用相应的源文件来构建obj /中的每个目标文件,但该行似乎做了其他事情。是这样的吗?是否有一种简单的方法可以在源目录中引用.c文件而无需“输入”目录?

提前致谢

1 个答案:

答案 0 :(得分:1)

我相信你的问题是$(DEPS)依赖。

您将IDIR设置为../include,但是从顶级目录(运行make的位置)设置该路径不正确。