【发布时间】:2020-08-11 17:26:57
【问题描述】:
m4 宏可以重定向输出到带有 shell $(...) 的变量吗?变量$MANPAGE_DOCBOOK_XSL 为空:(。
if test "x${XMLCATALOG}" != "x" -a "x$have_xmlcatalog_file" = "xyes"; then
DOCBOOK_XSL_URI="http://docbook.sourceforge.net/release/xsl/current"
DOCBOOK_XSL_PATH="manpages/docbook.xsl"
MANPAGE_DOCBOOK_XSL=$(${XMLCATALOG} ${XML_CATALOG_FILE} ${DOCBOOK_XSL_URI}/${DOCBOOK_XSL_PATH} | sed -n 's|^file:/\+|/|p;q')
fi
https://github.com/pevik/ima-evm-utils/blob/master/m4/manpage-docbook-xsl.m4#L22
查看Wayland中的类似代码,他们只是检查命令是否有效(是否可以找到目录),而不是检查值。
https://github.com/wayland-project/wayland/blob/master/configure.ac#L167
【问题讨论】:
-
m4宏是什么?您提供的所有内容看起来都像是直接的 shell 代码。
-
查看链接:github.com/pevik/ima-evm-utils/blob/master/m4/…。这就是问题:m4 宏是否正确?我认为可以在 m4 宏中使用 shell。
-
我不明白你的顾虑是什么。
m4是一种宏语言。说它通过扩展它在其中找到的宏将输入转换为输出并不太简单。m4不关心其输出对其他软件或系统的重要性。 -
您对相关代码有什么困难吗?
-
无论如何,关于引导问题,m4 宏不执行命令替换,但这无关紧要。 m4 当然可以发出 shell 脚本,这就是 Autoconf 使用 m4 的方式。那些绝对可以执行命令替换。您可以在编辑器中检查生成的
configure脚本,以确认该代码片段未损坏,并且更普遍地解决某些类型的 Autoconf 问题。
标签: autotools m4 docbook-xsl