PACKAGE_VERSION在库和应用程序中的多个config.h冲突

时间:2017-09-28 19:52:02

标签: c++ c autoconf

使用autoconf工具时,与包相关的M4宏由AC_INIT定义并存储在config.h中,其中一些列在下面:

  • PACKAGE
  • PACKAGE_NAME
  • PACKAGE_TARNAME
  • PACKAGE_VERSION
  • PACKAGE_STRING

我的大多数库包含文件都使用这个config.h文件,该文件存储在自己安装的include子目录中(即/usr/include/mylib)。

进入我的应用程序,它使用相同的库包含文件。

此外,此应用程序有自己的configure.ac / AC_INIT,反过来也会在本地生成自己的config.h

在编译时,我收到以下警告信息:

In file include from app.cpp:3:0:
config.h:427:0 warning: "PACKAGE_VERSION" redefined
 #define PACKAGE_VERSION "1.2"
 ^
In file included from <command-line>:0:0:
/usr/include/mylib/config.h:535:0: note: this is the location of the previous definition
#define PACKAGE_VERSION "4.0"

处理多个AC_INIT生成的PACKAGE宏组冲突的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

  

我的大多数库包含文件都使用这个config.h文件,该文件存储在自己安装的include子目录中(即/ usr / include / mylib)。

安装config.h以确定您遇到的问题并不是一个好主意。有几种方法可以从包含文件中删除config.h。一种方法是:

#if BUILDING_MYLIB
#include "config.h"
#endif

...

然后在构建应用程序时找到它们时处理其他依赖项。