gpt4 book ai didi

variables - Makefile 规则使用自动变量 $^ 无依赖

转载 作者:行者123 更新时间:2023-12-05 01:09:23 26 4
gpt4 key购买 nike

我从 GNU Make 手册中了解到符号 $^是一个自动变量,代表所有先决条件的名称。但是我发现了一个像这样的makefile:

SVR_OBJECT_FILES =      server.o\
server_func.o

CLT_OBJECT_FILES = client.o

CFLAGS = -Wall -Werror -W


CC = gcc

all: client/client server/serveur

client/client: $(CLT_OBJECT_FILES)

server/serveur: $(SVR_OBJECT_FILES)

client/client server/serveur:
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) $^ -o $@

%.o: %.c
$(CC) -c $<

clean:
rm -f client/client server/serveur *.o

哪个工作正常,所以我的问题是:
当 $^ 变量根本没有引用任何先决条件时,下面的命令如何链接正确的目标文件。 (该规则没有先决条件)
 $(CC) $(CFLAGS) $^ -o $@

最佳答案

$^包含目标的所有先决条件,而不仅仅是规则本身提到的先决条件。同一个文件可以在没有命令的规则中多次作为目标出现:

sometarget: dependency1

sometarget: dependency2
assemble -o $@ $^

sometarget: dependency3
sometarget 的依赖关系是 dependency1 , dependency2dependency3 , 当 assemble命令由 make sometarget 调用,它将接收所有三个作为参数。

在这里, $^将包含所有 $(CLT_OBJECT_FILES)$(SRV_OBJECT_FILES)取决于执行命令的目标。

关于variables - Makefile 规则使用自动变量 $^ 无依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15851349/

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