gpt4 book ai didi

makefile - Makefile中有多个冒号和等号(需要说明)

转载 作者:行者123 更新时间:2023-12-04 05:25:23 28 4
gpt4 key购买 nike

这只是makefile的一部分。我不太了解发生了什么。

OBJS = $(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o)
$(OBJS):$(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)

我所知道的是,这些行在'print-opts'之后使用'cc-command'将.cpp文件编译为.o。但是我不理解语义。

如果我扩展“OBJS”的宏,则此行应为:
$(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o) : $(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)

在我看来,它看起来像在'$(SRCS:$(SRC)/%。cpp = $(OBJ)/%。o)'中,它声称$(SRC)中的所有.cpp都将在$(。 OBJ),但这取决于$(OBJ)/%。o,取决于$(SRC)/%。cpp。这没有道理...

我不明白这里的等号是什么意思,以及多个冒号是什么意思。

最佳答案

假设您已经定义了这三个变量(如果尚未定义,则该规则将无法很好地工作):

SRC = source_dir
OBJ = object_dir
SRCS = source_dir/foo.cpp source_dir/bar.cpp

现在考虑分配
OBJS = $(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o)

这是一个 substitution reference;它说:“对于 $(SRCS)中任何形式为 $(SRC)/%.cpp的内容,请将其更改为 $(OBJ)/%.o”。因此 OBJS将评估为 object_dir/foo.o object_dir/bar.o

现在的规则:
$(OBJS):$(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)

Thuis是 static pattern rule。它指定目标列表( $(OBJS)),目标模式( $(OBJ)/%.o)和先决条件模式( $(SRC)/%.cpp)。 Make将目标与目标模式匹配,并使用该模式构造先决条件名称。因此,如果Make使用此规则构建 object_dir/foo.o,则词干将为 foo,前提条件为 source_dir/foo.cpp

(您没有询问 | print-opts,所以我认为它已经很清楚了。)

关于makefile - Makefile中有多个冒号和等号(需要说明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11425978/

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