【问题标题】:How to encapsulate the autotools' macro definitions?如何封装自动工具的宏定义?
【发布时间】:2013-05-23 14:48:51
【问题描述】:

在autoconf手册中,注明

AC_INIT(包、版本、[错误报告]、[tarname]、[url])

定义多个宏名称,例如 AC_PACKAGE_NAME 和 PACKAGE_NAME。

运行 configure 还会生成一个配置文件,其定义如下:

定义 HAVE_LIBGMP 1

在我编写 C++ 代码时,我发现这些宏很烦人但很有用。事实上,我需要与使用自动工具的库链接,因此在其标题中包含这些宏的情况发生了很多次。所以情况是 header 宏存在冲突,例如:

定义 PACKAGE_NAME “库”

定义 PACKAGE_NAME “我的”

所以,我想知道是否有办法告诉自动工具在某种结构中至少定义一些宏,如下所示:

`struct header_information{
static string package_name;
static bug_report;
....
}`

然后用正确的宏名称初始化它。 该解决方案将这些信息封装起来,不会污染全局命名空间?

【问题讨论】:

  • 问题是很多包维护者错误地安装了config.h,污染了全局命名空间。任何安装了config.h 的包都应该有一个针对它的错误。

标签: namespaces autotools


【解决方案1】:

在我看来,您似乎想滥用一个包私有、build-system-ony 配置头文件 (config.h),它恰好定义了一个您想使用的方便的宏名称。我认为非常明显的答案是“不要那样做”,否则你只能靠自己了。

除非我误会了你?

那些定义在那里,以便特定的库可以使用它们。这并不意味着要包括其他内容。事实上,config.h 中的大部分内容在特定包之外完全没有用。

这并不意味着 config.h 文件所属的库无法通过在使用这些变量的标头中定义公共结构来提供您正在寻找的内容。或者使用 pkg-config 的库(如果您只是在寻找包名称)可以为您提供一些信息。但我认为 autotools 不会或应该向您提供该信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2010-10-21
    • 2014-01-02
    • 2022-08-19
    • 2010-10-13
    相关资源
    最近更新 更多