【发布时间】:2019-08-06 14:54:22
【问题描述】:
如何在 Mercury 中指定编译时间定义?
我想让构建系统从配置文件中读取版本号并将其传递到模块中,以供谓词和函数访问。
例如,在 C 语言中,我会执行以下操作:gcc -DVERSION="1.2.0",然后在源代码中使用新定义的宏 VERSION。
【问题讨论】:
标签: mercury
如何在 Mercury 中指定编译时间定义?
我想让构建系统从配置文件中读取版本号并将其传递到模块中,以供谓词和函数访问。
例如,在 C 语言中,我会执行以下操作:gcc -DVERSION="1.2.0",然后在源代码中使用新定义的宏 VERSION。
【问题讨论】:
标签: mercury
Mercury 用户邮件列表中的 Zoltan Somogyi 回复:
[编译时间定义,如在 C 中,在 Mercury 中是不可能的],因为这是一个很少需要的功能,无需 Mercury 本身的特殊支持即可轻松实现。
....
[根据您的特定需要,从构建系统中推入版本号] 有一个名为 version.m.in 的文件,其中包含
:- 模块版本。
:- 接口。 :- func 版本 = 字符串。
:- 实施。 版本 = "@VERSION@"。
然后有一个 shell 或 sed 脚本,通过将 @VERSION@ 替换为实际的版本字符串来从 version.m.in 构造 version.m。如果您希望版本字符串在没有人为干预的情况下更改(例如,反映当前日期),您可以添加一个 mmake 规则以在适当的时间点自动从 version.m.in 构造 version.m。
【讨论】: