Bash M4糖不';在自动工具之外似乎不起作用 问题

Bash M4糖不';在自动工具之外似乎不起作用 问题,bash,macros,autotools,preprocessor,m4,Bash,Macros,Autotools,Preprocessor,M4,因此,我一直在尝试将m4sugar.m4,一个m4宏库集成到一个宏系统中,我正在为我的bash库构建该宏系统,以简化某些任务并节省键入时间,每当我尝试在m4中使用m4 sugar.m4时,我都会收到大量错误和废话: 错误片段 #m4_断言(表达式,[EXIT-STATUS=1]) # ---------------------------------------- #此宏确保表达式的计算结果为true,并在以下情况下退出 #表达式的计算结果为false。 m4:m4sugar.m4:223:ev

因此,我一直在尝试将
m4sugar.m4
,一个m4宏库集成到一个宏系统中,我正在为我的bash库构建该宏系统,以简化某些任务并节省键入时间,每当我尝试在m4中使用
m4 sugar.m4
时,我都会收到大量错误和废话:

错误片段
#m4_断言(表达式,[EXIT-STATUS=1])
# ----------------------------------------
#此宏确保表达式的计算结果为true,并在以下情况下退出
#表达式的计算结果为false。
m4:m4sugar.m4:223:eval中的错误表达式:[$1]
## ------------------- ##
## 4. 文件包含##
## ------------------- ##
#我们还想中和include(和sinclude的对称性),
#但我们想稍微扩展一下:在包含文件时发出警告
#好几次。一般来说,这是一次危险的行动,因为
#太多人忘记引用m4_define的第一个参数。
#
#例如,在以下情况下:
#m4_定义(foo,[bar])
#然后二读会变成
#m4_定义(条形,[条形])
#这肯定不是我的意思。
#m4_包含_唯一(文件)
# -----------------------
#声明文件正在加载;如果已经发生了,则发出警告
#包括在内。
m4:m4.m4:275:无法打开“$1”:没有这样的文件或目录
m4:m4.m4:277:无法打开“$1”:没有这样的文件或目录
#m4_包括(文件)
# ----------------
#与内置的include类似,但警告不要包含多个内容。
m4:m4.m4:285:未定义的内置“[include]”
#m4_包括(文件)
# -----------------
#就像内置的sinclude一样,但警告不要包含多个元素。
m4:m4.m4:293:未定义的内置“[sinclude]”
#m4_argn(N,ARGS…)
# -------------------
#从参数中提取参数N(大于0)。例子:
#m4_定义([b],[b])
#m4_argn([2],[a],[b],[c])=>b
#
#我们没有使用m4_车(m4_shiftn([$1],$@)),而是利用以下事实:
#GNU m4可以通过间接宏直接引用任何参数。
m4:m4.m4:444:内置'm4_incr'的非数字参数
#m4_cond(TEST1,VAL1,IF-VAL1,TEST2,VAL2,IF-VAL2,…[默认])
# -------------------------------------------------------------------
#与m4_if类似,不同之处在于每次测试都会在遇到时展开。
#如果TESTn的扩展与字符串VALn匹配,则结果为If VALn。
#如果未通过任何测试,则结果为默认结果。此宏允许
#昂贵测试的短路,安排快速测试是值得的
#筛选要首先运行的测试。
#
举一个例子,考虑以前的实现:
#
#m4若(m4指数([$1],\]),[-1],$2],
#m4_评估(m4_指数([$1],\\]>=0),[1],$2],
#m4_评估(m4_指数([$1],\$])>=0、[1],$2],
#m4_eval(m4_索引([$1],\`])>=0、[1],$3],
#m4_评估(m4_指数([$1],\“])>=0、[1],$3],
#          [$2])
#
#这里,m4_索引计算5次,m4_eval 4,即使$1包含
#没有反斜杠。这样做更有效:
#
#m4秒([m4指数([$1],\]),[-1],$2],
#[m4_评估(m4_指数([1],[1])>=0],[1],[2],
#[m4_评估(m4_指数([1],\$])>=0],[1],[2],
#[m4_eval(m4_指数([1],\`])>=0],[1],[3],
#[m4_评估(m4_指数([1],\“])>=0],[1],[3],
#            [$2])
#
#在$1没有反斜杠的常见情况下,只有一个m4_索引扩展
#发生,并且完全避免m4_eval。
#
#请将foreach.m4与此处所做的任何调整保持同步。
m4:m4sugar.m4:507:eval:[$#%3])、[2]、[m4#u fatal([$0:缺少参数])中的表达式不正确,
[_$0($@)]
m4:m4.m4:549:未定义的内置“[patsubst]”
m4:m4.m4:566:警告:忽略内置'm4_pushdef'的多余参数
m4:m4.m4:641:警告:忽略内置'm4_define'的多余参数
m4:m4sugar.m4:546:eval中的错误表达式:$#&1),0,[,])]
m4:m4.m4:664:警告:忽略内置'm4_define'的多余参数
m4:m4.m4:673:未定义的内置“[dumpdef]”
sh:[]:未找到命令
m4:m4.m4:706:警告:忽略内置'm4_define'的多余参数
m4:m4.m4:735:内置'm4_decr'的非数字参数
m4:m4.m4:767:警告:忽略内置'm4_define'的多余参数
m4:m4sugar.m4:780:未定义的内置“[m4wrap]”
m4:m4.m4:925:警告:忽略内置'm4_define'的多余参数
m4:m4.m4:2204:eval:m4\u default\u中的错误表达式引用(,
1)
m4:m4.m4:2204:eval中的错误表达式:((255)-(1))/*+(1)
m4:m4.m4:2204:eval:m4\u default\u中的错误表达式引用(,
-1)
m4:m4.m4:2204:eval中的错误表达式:((1)-(255))/-()*+(1)
m4:m4.m4:2204:警告:忽略内置'm4_define'的多余参数
m4:m4.m4:2204:求值中的表达式不正确:_m4_defn()+0
m4:m4sugar.m4:2204:警告:参数太少,无法内置'm4\u translatit'
m4:m4.m4:2204:求值中的表达式不正确:_m4_defn()+
m4:m4.m4:2203:错误:参数列表中的文件结束
我的问题
我正在使用最新版本的
m4
m4.m4
,并且我正在运行
m4
,使用
m4-p
,这样内置代码的前缀就是
m4
;是否有一些我只是缺少的东西,比如autoconf是否使用特殊工具或忽略语法错误的东西,或者我是否只需要咬紧牙关检查每个宏并修复它们?

您不应该将-p与m4 sugar.m4一起使用。m4sugar.m4(在其他一些东西中)的全部要点是,它模拟了m4_uu宏,而不影响其他宏(如dnl)。@CarloWood然而,它似乎在没有-P或-P的情况下不起作用。这很奇怪。运行
m4/usr/share/autoconf/m4sugar/m4sugar.m4