将 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
请注意 define
s 是在刻度之间。
我有一个 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
请注意 define
s 是在刻度之间。