将 m4 命令行定义传播到包含的文件

Propagate m4 command line define to included files

我有一个 m4 文件被其他几个 m4 文件包含,称之为 inc.m4。它定义了一些宏。我现在想要一个命令行标志来更改这些定义,例如

inc.m4

ifdef(`FLAG',dnl
define(`VAR',foo)dnl
,dnl
define(`VAR',bar)dnl
)dnl

test.m4

include(inc.m4)dnl
VAR

当我 运行 m4 test.m4 我按预期得到 bar

但是当我 运行 m4 -DFLAG test.m4 时,我也得到 bar 而不是我希望的 foo。似乎命令行中 FLAG 的定义没有传播到包含的文件。

还有其他解决方法吗?我希望 而不是 在包含 inc.m4:

的所有文件中执行此操作
include(inc.m4)dnl
ifdef(`FLAG`,,define(`VAR',foo))dnl override inc.m4 for FLAG mode
ifdef(`FLAG',dnl
`define(`VAR',foo)'dnl
,dnl
`define(`VAR',bar)'dnl
)dnl

请注意 defines 是在刻度之间。