问题标签 [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.

0 投票
2 回答
1281 浏览

preprocessor - GNU-M4:去除空行

如何使用 M4 从输入文件中删除空行(多余的空行)?

我知道我可以附加dnl到脚本每一行的末尾以抑制换行符输出,但我的意思是空行不在我的脚本中,而是在包含的数据文件中(我不应该放在的地方dnl's)。

我尝试过这样的事情:

(用任何内容替换新行)但它没有用。

谢谢。

0 投票
2 回答
1080 浏览

shell - autoconf:我是否应该始终使用 AS_IF 而不是 if 和 m4_if?

autoconf 手册建议使用AS_IF而不是if,但没有提及m4_if. 也应该AS_IF优先于m4_if?

手册的“内置函数的限制”部分说使用AS_IF它的可移植性,但AC_REQUIRE描述说使用它来扩展所需的宏。

我应该一直使用AS_IF吗?答案似乎是肯定的,但我又看到ifm4_if在其他宏中使用。什么时候可以不使用AS_IF

0 投票
1 回答
329 浏览

gnu - 如何在 autotools 配置中检查 shell cmd 的返回值

我想在配置过程中运行一个shell命令——如果这个操作的返回值为0,我想使用它。否则,我想退出并显示错误消息。

我写了这样的东西:

这行不通。RC 总是得到值 0,即使命令失败。

有谁知道怎么做?

谢谢

0 投票
1 回答
674 浏览

recursion - 如何定义一个与 m4 中的扩展同名的宏?

我试图用 if( 使用 GNU m4 1.4.14 替换 if 并且我ERROR: end of file in argument list 在尝试时收到:

我曾尝试转义括号,但这会导致 m4 在短暂的一段时间后出错,说它内存不足。浏览手册,我没有发现与此问题相关的任何内容。

将宏的名称更改为“IF”或“if”以外的名称后,它按预期工作,这让我相信它正在反复评估自己。

如果是这样,我如何定义一个只评估一次的宏?否则,我应该如何解决这个问题?

编辑我通过处理两次找到了解决此问题的方法,一次将 if 转换为 _IF,下一次将 _IF 转换为 if(。我认为有更好的方法可以做到这一点,所以这只是我眼中的临时解决方案。

0 投票
1 回答
922 浏览

macros - m4 在单词中扩展宏

我对 m4 很陌生,但找不到这个简单的东西:

是否可以在单词中间扩展宏?(我会将它用于在低级代码中的 C 符号名称中使用的计数器)

我的意思是:

预期的输出将是:

甚至可以这样做:

抱歉,如果这是一个非常简单的问题,但我在“m4 扩展 word 中的宏、m4 扩展子字符串”等方面的尝试失败了……

谢谢

编辑1:

StackOverflow 推荐了这个:Expansion of macro not working in M4 ...这确实是我一直在寻找的。

编辑2:

好吧,这并不容易:

这失败了,这可能是正常的。但是,在我的 C 符号名称中,我必须在单词中间替换这些宏。这样做的方法是什么?

0 投票
1 回答
1503 浏览

php - PHP - 扩展 Config.m4 文件

我正在尝试使用本教程编写 PHP 扩展。

config.m4文件中,有诸如PHP_ARG_ENABLE等之类的宏。这些宏的定义在哪里?

0 投票
1 回答
4637 浏览

autotools - 如何在 autoconf:configure.ac 中使用字符串变量

如何在 configure.ac 中为消息使用变量

在变量中定义字符串“此字符串在 WARN 和 ERROR 中使用”然后在AC_MSG_WARNAC_MSG_ERROR中使用该变量是有意义的。最好的方法是什么?

除此之外,m4 是否有任何宏可以通过将字符串和 $foo 作为参数来替换整个 if else ?

0 投票
1 回答
2055 浏览

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 getGNU M4 1.4.6 , but if I type/usr/local/bin/m4 --versoin , I getm4 (GNU M4) 1.4.16 `。如何将新版本设置为默认版本?

...最后,我想更新 autoconf 和 automake。关于安装它们还有什么我应该知道的吗?

0 投票
1 回答
70 浏览

c++ - 有错误输出包括最后几行代码

是否有可能,如果是这样,您将如何使错误输出包含最后几行代码?我知道 GNU g++ 对 and 的支持__LINE____FUNC__但那些只将行号作为 int 和函数名作为字符串给出 - 我想转储失败的函数的代码或至少程序执行的最后几个命令。

我在想也许可以编写一个 m4 脚本来解析代码库并注入它们所放入函数的字符串结构(当然不包括它们自己)。

还有其他/更好的想法吗?

0 投票
1 回答
642 浏览

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))'?