gpt4 book ai didi

c - 根据 .o 文件依赖于 .h 文件的规则生成 : excluding main. c

转载 作者:行者123 更新时间:2023-12-04 10:45:14 25 4
gpt4 key购买 nike

我有一个包含一堆源文件及其头文件的 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?

最佳答案

添加一个单独的静态模式规则

_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)

关于c - 根据 .o 文件依赖于 .h 文件的规则生成 : excluding main. c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com