makefile

时间:2016-06-15 12:34:09

标签: gnu-make

我正在尝试为每个通过make和sub make编译的文件分配一个唯一的编号。为此,我使用export varName = 1在顶级make中导出变量,然后对于使用以下

编译的每个.c文件进行递增。
$(eval varName=$(shell echo $$(($(varName)+1))))

当从顶级makefile调用子make文件时,问题varName再次被初始化为1

如何在调用子makefile时保留上次更新的值?

1 个答案:

答案 0 :(得分:0)

导出变量只是提供一个副本,子make使用该副本初始化自己独立的变量表。因此,这不允许回写值更改。

要创建真正的全局变量,可以调用外部程序或脚本,该程序或脚本会增加文件或数据库表中持久存储的计数器。但是,如果您的make子流程同时启动而不是按顺序启动,则可能会导致问题。这将导致并行访问,因此可能是不可重现的编号序列。

有一些objections in general反对使用sub-make。要为每个编辑创建额外的外部流程,也会延长制作时间。