我有一个包含大量源文件及其标题的C项目:
one.c
one.h
two.c
two.h
我也有一个main.c,但它没有.h文件:
main.c
我的Makefile中有这个:
# Use gcc to make object files from C files.
_build/%.o: %.c %.h
@mkdir -p _build
@echo
@echo Compiling $<
$(CC) $(CFLAGS) $< -o $@
这适用于one.o和two.o.但是对于main.o来说没有任何好处,它没有依赖的main.h。然后Make会抛出此错误。
make: *** No rule to make target `_build/main.o', needed by `all'. Stop.
我怎样才能最好地对待main.c?
答案 0 :(得分:1)
添加单独的静态模式规则
_build/%.o: %.c
@mkdir -p _build
@echo
@echo Compiling $<
$(CC) $(CFLAGS) $< -o $@
_build/one.o _build/two.o: _build/%.o: %.h
更好的是,使用依赖关系生成
OBJS := $(addprefix _build/,main.o one.o two.o)
DEPS := $(OBJS:.o=.d)
CPPFLAGS := -MMD -MP
.PHONY: all clean
all: $(OBJS)
$(OBJS): _build/%.o: %.c | _build
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
_build: ; mkdir -p $@
clean: ; $(RM) -r _build
-include $(DEPS)