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



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

公司 m4

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

测试.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 在刻度之间。

最新更新