Makefile自动依赖问题

时间:2011-07-22 09:21:41

标签: makefile

我正在尝试设置一个自动依赖生成的Makefile。我重写了这个页面http://make.paulandlesley.org/autodep.html并编写了我自己的Makefile:

编辑: 我在Beta评论后做了一些更改。 现在,所有文件和makefile都处于同一级别。 但不是更幸运。

CC = gcc
LD = gcc
RM = rm -rf
MAKEDEPEND = gcc -M $(CFLAGS) $(INCLUDE) -o $*.d $<

CFLAGS = -Wall -g

INCLUDE = -I/usr/include/CUnit
LIB = -llibcunit

SRC = lib_dac.c
SRC += main.c

OBJS = $(SRC:.c=.o)

PROG = tests

all: $(OBJS)

%.o : %.c
    $(MAKEDEPEND); \
        cp $*.d $*.P; \
        sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
        -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
        rm -f $*.d
    $(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<

-include $(SRCS:.c=.P)

PHONY: clean

clean:
    $(RM) *.o *.exe
    $(RM) *.P

但我不能让它奏效。当我触摸lib_dac.h时,依赖lib_dac.c就什么都没发生。 我错过了什么吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

MAKEDEPENDlib_dac.o提供了依赖关系,而不是src/lib_dac.o。当Make尝试构建src/lib_dac.o时,它不知道涉及lib_doc.h

有几种方法可以解决此问题,但选择取决于您希望如何处理目标文件(例如lib_dac.o)。我注意到你定义了一个BIN_PATH,但是没有使用它;而是在src中构建对象。这是你的意图吗?

修改:
以下是将对象文件放在bin/中的快速修复方法。 (擅长使用文件那里来构建文件这里,但不是相反。)

OBJS = $(patsubst %.c,bin/%.o,$(SRC))

bin/%.o : %.c
  ...

vpath %.c src

答案 1 :(得分:0)

好的,我在makefile中发现了拼写错误。在包含中,我写了$SRCS而不是$SRC。该死的复制/粘贴。

现在效果很好,但目前所有文件都在同一个目录中,我真的不喜欢它。

但依赖关系生成有效,所以问题就解决了。