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