0

在 autoconf 手册中,注意到

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

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

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

定义 HAVE_LIBGMP 1

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

定义 PACKAGE_NAME “库”

定义 PACKAGE_NAME “我的”

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

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

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

4

1 回答 1

0

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

除非我误会你?

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

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

于 2013-05-31T19:41:52.973 回答