Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile:生成所有';的有效方法;。c';文件是否依赖于同名的头文件?_C_Header_Makefile - Fatal编程技术网

Makefile:生成所有';的有效方法;。c';文件是否依赖于同名的头文件?

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文件 编辑 如果可能的话,我希望使

我有一个包含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
文件

编辑
如果可能的话,我希望使用
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 $@ $^