【发布时间】:2019-10-11 18:23:08
【问题描述】:
我正在尝试理解生成文件,而动态目标的使用似乎很混乱。我无法理解这些动态目标是如何在生成文件中调用的。
我尝试通过打印 shell 命令(make V=1)来调试以下内容,但我无法消除我的疑虑。我看到正在构建文件/1、文件/2、文件/3 和文件/4,但我没有看到任何循环或对该目标的多次调用。我还尝试查看https://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html 文档,但也没有在那里获得任何相关信息。任何关于这种动态目标及其执行的解释都会非常有帮助。
PROGS= \
path/to/file/1 \
path/to/file/2
EXTRA_PROGS= \
path/to/file/3 \
path/to/file/4
GO_BIN_BUILD=$(SOME_COMMAND_TO_BUILD_GO_BINARY)
GO_BIN_BUILD_DEPS=$(SOME_COMMAND_TO_BUILD_GO_DEPENDENCIES)
CTF_INTEGRATION_TESTS=$(foreach root,$(CTF_DIRS),$(root)/$(notdir $(root)).suite)
$(PROGS) $(EXTRA_PROGS) $(CTF_INTEGRATION_TESTS): $(GO_BIN_BUILD_DEPS) #the dynamic target in question.
$(GO_BIN_BUILD)
【问题讨论】:
-
你说的动态目标是什么意思?您是指由隐式规则(例如模式规则)创建的目标吗?我没有看到您的 makefile 中定义了任何模式规则。
-
@MadScientist,如果我犯了任何错误,请原谅我,但
$(PROGS) $(EXTRA_PROGS) $(CTF_INTEGRATION_TESTS): $(GO_BIN_BUILD_DEPS)不是动态目标吗?使用变量值构造的目标。我对语法很陌生,如果问题包含错误的信息,我会删除它, -
只是“动态目标”不是 make 手册或 POSIX 规范中使用的术语,所以我不知道您的意思。
-
您是在问目标是如何被调用的,或者规则是如何构建这些文件的?
-
@Beta,我试图了解如何调用这些规则。我的印象是这些目标就像程序中的函数一样,它们在被调用之前不会做任何事情。