+ -
当前位置:首页 → 问答吧 → 一个makefile

一个makefile

时间:2010-08-21

来源:互联网

CXX = /usr/bin/g++

sources = $(wildcard *.c)

depends_dir = depends
objects_dir = release


depends = $(patsubst %.c, $(depends_dir)/%.d, $(sources))
objects = $(patsubst %.c, $(objects_dir)/%.o, $(sources))


.PHONY:
        all clean

all: init demo

init:
        @mkdir -p depends
        @mkdir -p release


$(depends) : $(depends_dir)/%.d : %.c
        @set -e;\
        rm -f $@;\
        $(CXX) -MM $< | sed -e 's,\($*\)\.o[:]*,\1.o $@ :,g' >$@



demo : $(depends) $(objects)
        $(CXX) -o demo $(objects)



-include $(depends)
$(objects) : $(objects_dir)/%.o : %.c
        $(CXX) -c $< -o $@

clean:
        rm -rf $(objects_dir)
        rm -rf $(depends_dir)
        rm demo




初学Makefile, 写出了上面的版本,想编译的就是一个test.c文件

但在第一次make的时候总是报错
/bin/sh: line 2: depends/test.d: No such file or directory
make: *** No rule to make target `depends/test.d', needed by `demo'.  Stop.

第二次make才能成功,
请问高手,哪里有错误?

谢谢

作者: alexandnpu   发布时间: 2010-08-21

就这毛病, 不是错.

作者: gtkmm   发布时间: 2010-08-21