如何设置一个目标后的变量

How to set a variable after a target been made?

本文关键字:目标 变量 一个 何设置 设置      更新时间:2023-10-16

我有cc。proto目录下的文件。 *。proto文件用于生成。cc.h文件。

现在我想要$(SRC)有所有的。cc文件,包括那些生成的。如何?

PROTOS = $(wildcard *.proto)
SRC = $(wildcard *.cc)
OBJS = $(patsubst %.cc,%.o,$(SRC))
all: proto $(OBJS)
proto: $(PROTOS)
    protoc --cpp_out=. $(PROTOS)

简短的回答:你不能。Make在执行任何规则之前确定要执行的规则列表。

长答案:你可以,但是你必须让Make自己运行第二次:

PROTOS = $(wildcard *.proto)
SRC = $(wildcard *.cc)
OBJS = $(patsubst %.cc,%.o,$(SRC))
all: proto
    $(MAKE) objs
proto: $(PROTOS)
    protoc --cpp_out=. $(PROTOS)
objs: $(OBJS)