我正在尝试为每个通过make和sub make编译的文件分配一个唯一的编号。为此,我使用export varName = 1
在顶级make中导出变量,然后对于使用以下
.c
文件进行递增。
$(eval varName=$(shell echo $$(($(varName)+1))))
当从顶级makefile调用子make文件时,问题varName
再次被初始化为1
。
如何在调用子makefile时保留上次更新的值?
答案 0 :(得分:0)
导出变量只是提供一个副本,子make使用该副本初始化自己独立的变量表。因此,这不允许回写值更改。
要创建真正的全局变量,可以调用外部程序或脚本,该程序或脚本会增加文件或数据库表中持久存储的计数器。但是,如果您的make子流程同时启动而不是按顺序启动,则可能会导致问题。这将导致并行访问,因此可能是不可重现的编号序列。
有一些objections in general反对使用sub-make。要为每个编辑创建额外的外部流程,也会延长制作时间。