我的root makefile中有一些规则如下所示:
DEPS += a
DEPS += b
...
$(THE_BINARY) : $(DEPS)
在提供一些必需变量之后,单个app makefile include
这个根makefile。我想这样做,以便应用程序也可以添加到DEPS
变量。这有效:
DEPS += some_other_dep
include root.make
但这不是:
include root.make
DEPS += some_other_dep
这是因为($DEPS)
是在分配规则时扩展的,而不是在最后?有没有办法以这样的方式编写根makefile:DEPS += ...
两行都做同样的事情?
答案 0 :(得分:1)
Aggieboy的评论在问题上是正确的:如果你首先包含makefile,那么使用$(DEPS)
的规则已经扩展,然后再向其添加额外的内容,所以它没有看到额外的东西。我对使用常见包含文件编写此类makefile环境的人的建议是,定义任何规则的包含文件应该始终在最后。
如果你想这样做,.SECONDEXPANSION
会解决这个问题,而且实际上并不难理解。如果description in the manual难以阅读,那么查看this discussion of expansion in GNU make,尤其是secondary expansion上的{{3}}可能会有用。
我通常不建议这样做,因为虽然它会解决此问题,但您会在下一条规则中遇到同样的问题......您基本上会有这样的问题如果要在任何WRT变量赋值顺序中允许include
个文件,请对所有规则使用二级扩展。并且,二级扩展仅适用于先决条件列表中使用的变量。如果你想推迟扩展/作为目标使用的变量,那么你运气不好。