我是使用 make 的新手,并且一直在通过本教程学习基础知识。这是教程中的最后一个示例 makefile 示例:
IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)
ODIR=obj
LDIR =../lib
LIBS=-lm
_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
假设所有 .c 文件仅包含 hellomake.h,这应该可以正常工作,但如果每个 .c 文件包含不同的标头,则它不会工作。是否可以编写一个知道每个 .c 文件包含什么的makefile,所以我不必像这样手动进入:
foo.o: foo.c something.h
...
bar.o: bar.c somethingelse.h
...
因为这似乎会浪费很多时间。