如何封装autotools的宏定义?

时间:2013-05-23 14:48:51

标签: namespaces autotools

在autoconf手册中,注意到

AC_INIT(包,版本,[bug-report],[tarname],[url])

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

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

定义HAVE_LIBGMP 1

在编写C ++代码时,我发现这些宏很烦人但很有用。事实上,我需要多次链接到使用autotools的库,因此在其标题中包含这些宏。因此情况是标头宏存在冲突,例如:

定义PACKAGE_NAME“library”

定义PACKAGE_NAME“我的”

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

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

然后使用正确的宏名称对其进行初始化。 这个解决方案会保持这些信息的封装,并且不会污染全局命名空间吗?

1 个答案:

答案 0 :(得分:0)

在我看来,你想要滥用一个package-private,build-system-ony配置头文件(config.h),恰好可以定义一个你想要使用的方便的宏名称。我认为非常明显的答案是“不要那样做”,否则你就是靠自己。

除非我误解了你?

那些定义是存在的,以便特定的库可以使用它们。它不适用于包含其他内容。事实上,config.h中的大部分内容在特定包之外完全没用。

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