Makefile:生成所有';的有效方法;。c';文件是否依赖于同名的头文件?
我有一个包含50个Makefile:生成所有';的有效方法;。c';文件是否依赖于同名的头文件?,c,header,makefile,C,Header,Makefile,我有一个包含50个.c源文件的目录,其中每个.c文件都依赖于一个同名的.h文件加上一个公共头文件 例如: foo.c depends on foo.h and common.h bar.c depends on bar.h and common.h baz.c depends on baz.h and common.h 是否可以设置此依赖项而不必为每个.c文件创建单独的目标 如果有必要,这个Makefile的最终输出将是一个libfoo.a库,其中包含每个.o文件 编辑 如果可能的话,我希望使
.c
源文件的目录,其中每个.c
文件都依赖于一个同名的.h
文件加上一个公共头文件
例如:
foo.c depends on foo.h and common.h
bar.c depends on bar.h and common.h
baz.c depends on baz.h and common.h
是否可以设置此依赖项而不必为每个.c文件创建单独的目标
如果有必要,这个Makefile的最终输出将是一个libfoo.a
库,其中包含每个.o
文件
编辑
如果可能的话,我希望使用
gnu make
语法来实现这一点,而不是为每个文件创建一个目标,无论该目标是手动创建的还是由类似makedepend
的东西创建的,据我所知,这应该足够了
%.o: %.c %.h common.h
\tgcc -c $<
%.o:%.c%.h公共.h
\tgcc-c$<
\t
是一个选项卡,gcc-c$OBJECTS=$(patsubst%.c、%.o、$(通配符*.c))
%.o:%.c%.h普通.h
gcc-c$<-o$@
libfoo.a:$(对象)
ar rcs$@$^
看看,我不想让多个目标独立于它们的创建方式。但因为我不清楚,这里是+1只是有点太晚了。这正是我正在做的,只是我使用了$(AR)$(ARFLAGS)$@$?
并且我没有在gcc
行中指定-o$@
部分+1.顺便说一句,我喜欢在pattern sub中嵌套$(通配符)
,而不需要SOURCES
变量,但我无法让它工作。也许您需要$(patsubst)
来完成此操作?是的,这可以-->OBJECTS=$(patsubst%.c,%.o,$(wildcard*.c))
您是对的。似乎只有在转换存储在变量中的文本时,替换引用和patsubst
表单才是等效的,而不是在使用嵌套命令时。编辑我的答案以修正错误。
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))
%.o: %.c %.h common.h
gcc -c $< -o $@
libfoo.a: $(OBJECTS)
ar rcs $@ $^