gpt4 book ai didi

makefile - 了解生成文件

转载 作者:行者123 更新时间:2023-12-04 18:16:07 25 4
gpt4 key购买 nike

我说的是this question该人已使用该任务的生成文件更新了他的最终解决方案。我很难理解它是如何完成的。

有一个规则:

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@

我无法理解,但凭直觉我知道它会做什么。几乎所有其他事情都非常清楚。谢谢!

最佳答案

这是 static pattern rule .第一个字段是一个目标列表,第二个是 Make 用来隔离目标“词干”的目标模式,第三个是 Make 用来构造先决条件列表的先决条件模式。

假设你有

SRCDIR = src
OBJDIR = obj
OBJECTS = obj/foo.o obj/bar.o obj/baz.o

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
@$(CC) $(CFLAGS) -c $< -o $@

如果您 make obj/foo.o , Make 首先将此规则标识为要使用的规则(因为 obj/foo.o 在目标列表 $(OBJECTS) 中),将其与目标模式 obj/%.o 匹配并发现词干(与通配符 % 匹配的部分)为 foo ,然后将其插入到 prereq 模式 src/%.c发现前提是 src/foo.c .

如果您还定义了变量
CC = gcc
CFLAGS = -thisflag -thatflag=something

那么规则中的命令就变成了
    @gcc -thisflag -thatflag=something -c src/foo.c -o obj/foo.o

(注意 $< 是第一个先决条件, $@ 是目标名称。)

回答您的另一个问题:是的,makefile 可以处理对头文件( x.h)的依赖,因此如果头文件已被修改,Make 将重建目标。不,这个 makefile 不会那样做。您可以手动修改makefile,添加如下规则
a.o: x.h

假设您知道实际包含的内容,或者您​​可以让 makefile 自动执行此操作,这是您可能不应该尝试的高级技术。

关于makefile - 了解生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674194/

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