使用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宏组冲突的最佳方法是什么?
答案 0 :(得分:2)
我的大多数库包含文件都使用这个config.h文件,该文件存储在自己安装的include子目录中(即/ usr / include / mylib)。
安装config.h
以确定您遇到的问题并不是一个好主意。有几种方法可以从包含文件中删除config.h
。一种方法是:
#if BUILDING_MYLIB
#include "config.h"
#endif
...
然后在构建应用程序时找到它们时处理其他依赖项。