我的根makefile中有一些规则,如下所示:

DEPS += a
DEPS += b
...

$(THE_BINARY) : $(DEPS)

提供一些必需的变量后,各个应用程序生成文件include此根生成文件。我想这样做,以便应用程序也可以添加到DEPS变量中。这有效:
DEPS += some_other_dep
include root.make

但这不是:
include root.make
DEPS += some_other_dep

这是因为($DEPS)是在分配规则的地方而不是结尾处扩展的?有没有办法以两种DEPS += ...行都做相同的方式来写入根makefile?

最佳答案

Aggieboy对这个问题的评论是正确的:如果您首先包含makefile,则在添加其他内容之前已经扩展了使用$(DEPS)的规则,因此看不到其他内容。我对使用通用包含文件编写这种makefile环境的人的建议是,定义任何规则的包含文件应始终位于末尾。

确实,如果您想采用这种方式,.SECONDEXPANSION将解决此问题,并且实际上并不难理解。如果description in the manual太难读,那么查看this discussion of expansion in GNU make可能会很有用,尤其是secondary expansion上的那个。

我通常不建议这样做,因为尽管它可以解决此问题,但您会在下一条规则中遇到相同的问题...如果要允许在其中包含include文件,则基本上必须对所有规则使用二级扩展任何订单WRT变量分配。并且,二次扩展仅适用于先决条件列表中使用的变量。如果您想推迟在目标中/用作目标的变量的扩展,那将很不幸。

关于c++ - Makefile延迟变量扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28328794/

10-17 01:33