问题标签 [m4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
preprocessor - GNU-M4:去除空行
如何使用 M4 从输入文件中删除空行(多余的空行)?
我知道我可以附加dnl
到脚本每一行的末尾以抑制换行符输出,但我的意思是空行不在我的脚本中,而是在包含的数据文件中(我不应该放在的地方dnl's
)。
我尝试过这样的事情:
(用任何内容替换新行)但它没有用。
谢谢。
shell - autoconf:我是否应该始终使用 AS_IF 而不是 if 和 m4_if?
autoconf 手册建议使用AS_IF
而不是if
,但没有提及m4_if
. 也应该AS_IF
优先于m4_if
?
手册的“内置函数的限制”部分说使用AS_IF
它的可移植性,但AC_REQUIRE
描述说使用它来扩展所需的宏。
我应该一直使用AS_IF
吗?答案似乎是肯定的,但我又看到if
并m4_if
在其他宏中使用。什么时候可以不使用AS_IF
?
gnu - 如何在 autotools 配置中检查 shell cmd 的返回值
我想在配置过程中运行一个shell命令——如果这个操作的返回值为0,我想使用它。否则,我想退出并显示错误消息。
我写了这样的东西:
这行不通。RC 总是得到值 0,即使命令失败。
有谁知道怎么做?
谢谢
recursion - 如何定义一个与 m4 中的扩展同名的宏?
我试图用 if( 使用 GNU m4 1.4.14 替换 if 并且我ERROR: end of file in argument list
在尝试时收到:
我曾尝试转义括号,但这会导致 m4 在短暂的一段时间后出错,说它内存不足。浏览手册,我没有发现与此问题相关的任何内容。
将宏的名称更改为“IF”或“if”以外的名称后,它按预期工作,这让我相信它正在反复评估自己。
如果是这样,我如何定义一个只评估一次的宏?否则,我应该如何解决这个问题?
编辑我通过处理两次找到了解决此问题的方法,一次将 if 转换为 _IF,下一次将 _IF 转换为 if(。我认为有更好的方法可以做到这一点,所以这只是我眼中的临时解决方案。
macros - m4 在单词中扩展宏
我对 m4 很陌生,但找不到这个简单的东西:
是否可以在单词中间扩展宏?(我会将它用于在低级代码中的 C 符号名称中使用的计数器)
我的意思是:
预期的输出将是:
甚至可以这样做:
抱歉,如果这是一个非常简单的问题,但我在“m4 扩展 word 中的宏、m4 扩展子字符串”等方面的尝试失败了……
谢谢
编辑1:
StackOverflow 推荐了这个:Expansion of macro not working in M4 ...这确实是我一直在寻找的。
编辑2:
好吧,这并不容易:
这失败了,这可能是正常的。但是,在我的 C 符号名称中,我必须在单词中间替换这些宏。这样做的方法是什么?
php - PHP - 扩展 Config.m4 文件
我正在尝试使用本教程编写 PHP 扩展。
在config.m4
文件中,有诸如PHP_ARG_ENABLE
等之类的宏。这些宏的定义在哪里?
autotools - 如何在 autoconf:configure.ac 中使用字符串变量
如何在 configure.ac 中为消息使用变量
在变量中定义字符串“此字符串在 WARN 和 ERROR 中使用”然后在AC_MSG_WARN和AC_MSG_ERROR中使用该变量是有意义的。最好的方法是什么?
除此之外,m4 是否有任何宏可以通过将字符串和 $foo 作为参数来替换整个 if else ?
macos - 在 Mac OS X 10.6.8 上更新 m4
我正在尝试将 m4 从版本 1.4.6(OS X 10.6.8 附带的版本)升级到 1.4.16。我已经安装了自制软件,并且我还从源代码构建到 /usr/local/ (并编辑了 /etc/paths 以将 /usr/local 放在 /usr 之上),但系统版本似乎仍然优先。
具体来说,如果我输入m4 --version', I get
GNU M4 1.4.6 , but if I type
/usr/local/bin/m4 --versoin , I get
m4 (GNU M4) 1.4.16 `。如何将新版本设置为默认版本?
...最后,我想更新 autoconf 和 automake。关于安装它们还有什么我应该知道的吗?
c++ - 有错误输出包括最后几行代码
是否有可能,如果是这样,您将如何使错误输出包含最后几行代码?我知道 GNU g++ 对 and 的支持__LINE__
,__FUNC__
但那些只将行号作为 int 和函数名作为字符串给出 - 我想转储失败的函数的代码或至少程序执行的最后几个命令。
我在想也许可以编写一个 m4 脚本来解析代码库并注入它们所放入函数的字符串结构(当然不包括它们自己)。
还有其他/更好的想法吗?
assembly - 请解释字符串中的 m4 嵌套定义
我目前正在阅读《SPARC 体系结构、汇编语言编程和 C. 第二版》一书。我到了书中的一个地方,我不理解或无法理解某个命令:
问题是,我确实理解第一行。但我真的不明白第二行的第二个参数。书中的解释也无济于事。
从书中:
在这里,我们首先定义了一个符号 loc,其值为 0。这个符号将表示位置计数器,即正在汇编的指令的内存地址。每个宏定义首先被更改为打印 loc 的当前值,然后将 loc 重新定义为 loc 加上存储指令所需的内存位置。
宏的参数是字符和字符串,而不是数值。在重新定义 loc 的值时,我们使用了另一个内置的宏 eval。eval 用它的字符串参数来表示一个算术表达式。eval 计算这个表达式并以数字字符串的形式返回它的值。
我知道上面的解释对你来说听起来很清楚,但对我来说不是。我完全不明白的是:'loc: 44 $1 define('loc', eval(loc+2))'
我不明白:
为什么这是一个字符串?
为什么 loc 必须在那里?
为什么在定义了 44 $1 之后,还有另一个定义,“define('loc', eval(loc+2))'?