1

如何在 nmake 调用之间转发宏?

假设我们有

--- a.mak ---

some_variable = value

all:
   nmake -f b.mak

--- END ---

--- b.mak ---

all:
   @echo some_variable = WHAT TO PUT HERE TO GET VALUE OF some_variable?

--- END ---

我正在尝试不同的事情,例如使用 set 和 setx 命令,但是在父 makefile 中设置的变量值在从其中调用的 makefile 中不可见。

4

2 回答 2

1

这是 MSDN 关于递归调用nmake的信息:

使用递归宏递归调用 NMAKE。递归会话继承命令行和环境变量宏以及 Tools.ini 信息。它们不继承 makefile 定义的推理规则或 .SUFFIXES 和 .PRECIOUS 规范。要将宏传递给递归 NMAKE 会话,请在递归调用之前使用 SET 设置环境变量,在递归调用的命令中定义宏,或在 Tools.ini 中定义宏。

所以,你可以a.mak看起来像:

# ---- a.mak ----
some_variable = value

all:   
    nmake -f b.mak some_variable=$(some_variable)
#--- END ---

另外,请注意,使用setsommand 将变量放入环境中也可以,但会nmake自动将环境变量名称大写(即使对于奇怪的变量名称,例如“ windir”,由于某种原因在系统中是小写的),并且区分大小写,所以要使用环境变量,你必须使用大写的变量。

来自 MSDN

继承的名称被转换为大写。继承发生在预处理之前

因此,b.mak如果您要使用环境而不是在命令行上显式传递变量,那么您应该如下所示:

#--- b.mak ---
all:
   @echo some_variable is: $(SOME_VARIABLE)
#--- end ---

因此,将 nmake 宏名称的全大写命名约定标准化可能不是一个坏主意。

于 2009-04-28T21:24:13.233 回答
0

也许您应该考虑不递归调用 make,请参阅论文Recursive Make Considered Harmful。您仍然可以拥有类似于您已经拥有的 makefile(由 make 包含)的模块化文件,只是规则仅在一个顶级 makefile 中定义。

于 2009-04-29T00:14:13.403 回答