make:从.o文件依赖.h文件的规则中排除main.c

时间:2016-05-10 01:02:41

标签: c makefile

我有一个包含大量源文件及其标题的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?

1 个答案:

答案 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)