如何避免重新定义VERSION,PACKAGE等

Jas*_*Day 9 c unix linux automake autoconf

我没有看到任何与GNU autoconf/automake构建有关的问题,但我希望至少有一些人熟悉它.开始:

我有一个项目(我称之为myproject),包括另一个项目(供应商).供应商项目是由其他人维护的独立项目.包含这样的项目是相当简单的,但在这种情况下有一个小问题:每个项目都生成自己的config.h文件,每个文件定义标准宏,如PACKAGE,VERSION等.这意味着,在构建期间,当供应商正在构建中,我收到很多这样的错误:

... warning: "VERSION" redefined
... warning: this is the location of the previous definition
... warning: "PACKAGE" redefined
... warning: this is the location of the previous definition
Run Code Online (Sandbox Code Playgroud)

这些只是警告,暂时至少,但我想摆脱它们.我已经能够通过Google搜索获得的唯一相关信息是automake邮件列表中的这个主题,这不是很多帮助.还有其他人有更好的想法吗?

Tho*_*ele 5

一些说明:

  • 你没有提到如何config.h包括 - 用引号或尖括号.有关差异的更多信息,请参阅此其他问题.简而言之,config.h通常包括引号,而不是尖括号,这应该使预处理器更喜欢config.h项目自己的目录(这通常是你想要的)
  • 你说一个子项目应该包括封闭项目config.h通常这根本不是你想要的.子项目是独立的,其PACKAGE和VERSION应该是该子项目中的一个,而不是您的子项目.例如,如果在xmlreader项目中包含libxml,您仍然希望使用PACKAGE libxml和VERSION(无论libxml版本是什么)编译libxml代码.
  • config.h从公共标题中包含它通常是一个很大的错误.config.h对于您的项目或子项目始终是私有的,并且只应包含在.c文件中.因此,如果您的供应商的文档说要包含他们的"vendor.h"并且公共标题包含config.h某种方式,那么这是禁止的.同样,如果您的项目是库,请不要config.h在公开安装的标头中包含任何内容.