在利用图书馆的自动工具(有config.h
文档)和该图书馆的软件时,汇编者抱怨对一些宏观产品进行了重新定义(PACKAGE_NAME,PACKAGE_TARNAME等)。
我如何防止这种情况?
图书馆需要<代码>config.h文档,以将其安装到使用该软件的软件上。
现在,我有一份包装稿library_config.h
,其中包括原来的config.h
,并规定了用户不使用自动工具,但甚至未确定该一揽子计划中的宏观标准时的违约情况。
#ifndef LIB_CONFIG_H
#define LIB_CONFIG_H
#ifdef HAVE_CONFIG_H
# include "config.h"
# undef PACKAGE
# undef PACKAGE_BUGREPORT
# undef PACKAGE_NAME
# undef PACKAGE_STRING
# undef PACKAGE_TARNAME
# undef PACKAGE_VERSION
# undef VERSION
#else
# if defined (WIN32)
# define HAVE_UNORDERED_MAP 1
# define TR1_MIXED_NAMESPACE 1
# elif defined (__GXX_EXPERIMENTAL_CXX0X__)
# define HAVE_UNORDERED_MAP 1
# else
# define HAVE_TR1_UNORDERED_MAP 1
# endif
#endif
#endif
我认为,最好选择是在没有图书馆的情况下: 我如何避免在图书馆使用汽车时对PACKAGE、PACKAGE_NAME等的定义?
EDIT:正好解释。
使用<代码> AC_CONFIG_HEADER XI in the configure.ac
of the Library I produced a config.h
file with a Much ofeu definitions. 这一定义对图书馆本身(其编集部分和标题档案)和客户软件都有用。 但这正是<代码>。 AC_CONFIG_HEADER将我需要的有用宏观与固定名称的其他通用定义(PACKAGE,PACKAGE_NAME)混为一谈,即当汽车也用于客户软件配置时,这些术语会发生冲突。