在makefile中使用计算名称来模拟名称空间(fx target local)

时间:2015-12-21 10:08:33

标签: makefile gnu-make

我的想法是使用计算名称来模拟名称空间,例如:

GetVar = $(or $($2@$1),$($2))

fubar@namespace = foo bar
frob = baz

$(info $(call GetVar,namespace,fubar))
$(info $(call GetVar,namespace,frob))

此外,这可以在规则中用于具有目标局部变量

cmd@target = echo hello

target:
    $(call GetVar,$@,cmd)

这似乎适用于GNU-make,但它提出了一些问题:

首先,这将导致在变量名中使用非正常字符。当然,可以使用除@之外的另一个分隔符,但是在使用目标名称作为命名空间名称时,您将不可避免地遇到点和斜线以变量名称结尾的情况。这有多糟糕? GNU-make手册告诉我要避免这种情况,并提到通过环境与submakes共享此功能的能力,但这是一个非递归的makefile设置。

这是否正在利用GNU-make的非便携功能?我是否需要关注破坏此功能的功能版本?

这个成语实际上是否有任何使用的例子?无法找到任何案例让我想知道是否有任何我错过的东西让这个想法变得糟透了。

如果这不是一个坏主意,是否有任何特定的命名空间分隔符比其他更合适?

1 个答案:

答案 0 :(得分:0)

据我所知,你主要是在重建target-specific variables。你有什么理由不想使用它们吗?

target: cmd = echo hello

target:
        $(cmd)