我还没有看到任何有关的问题GNU autoconf/automake建立,但我希望至少一些你熟悉的。这里云:

我有一个项目(我会叫它myproject),包括另外的项目(供应商).供应商的项目是一个独立的项目保持其他人。包括这样一个项目是相当 简单的, 但在这种情况下,有一个小小的障碍:每个项目产生了其自己的 config.h 文件中,每个定义的标准宏例如包装版本,等等。这意味着,在建立,当供应商正在修建的,我得到大量的错误这样的:

... warning: "VERSION" redefined
... warning: this is the location of the previous definition
... warning: "PACKAGE" redefined
... warning: this is the location of the previous definition

这些只是警告的时间至少,但我想摆脱他们。唯一相关的信息,我们已经能够把一个谷歌搜索 线上automake的邮件列表,这不是一个很大的帮助。没有人有什么好主意吗?

有帮助吗?

解决方案

一些注意事项:

  • 你没有提到如何 config.h 是包含报价或角度的方括号。看看 这个其它问题 更多信息上的差异。在短短的, config.h 通常包含报价,不角架,这应该使预处理器喜欢的 config.h 从该项目自己的目录(这些通常是你想要的)
  • 你说一个次级项目应包括封闭的项目 config.h 通常这不是在所有你想要什么。该项目是独立的,其包装和版本应该是一个次级项目,不是你的。如果包括用于在你的项目。例如,你仍然想要用于代码汇编与包用于版本(无论用于版本)。
  • 这通常是一个很大的错误有 config.h 包括从公共头。 config.h 总是私人对你的项目或次级项目,并且只应包括从。c文件。因此,如果供应商文档说,包括他们的"供应商。h"和公众包括头 config.h 不知何故,然后这是一个没有-没有。同样,如果项目是一个图书馆,不包括 config.h 任何地方从你的公安装的标题。

其他提示

这绝对是一个黑客,但是我后处理autogen会 config.h 文件:

sed -e 's/.*PACKAGE_.*//' < config.h > config.h.sed && mv config.h.sed config.h

这是容忍的,在我们建立的环境,但我想在一个更清洁的方式。

事实证明有一个非常简单的解决办法在我的情况。供应商的项目收集的头几个文件合并成一个单头文件,然后 #included由供应商来源。但使规则,该规则建立的整块头不小心包括在内所产生的 config.h.存在的包装版本,等等。配置变量在整块头是什么导致重新界定警告。事实证明,该供应商的 config.h 是无关紧要的,因为"配置。h"始终决心 $(top_builddir)/config.h.

我相信这是它应该的方式工作。通过默认的一个次级项目应包括封闭的项目 config.h 而不是自己的,除非次级项目明确包括其自身的,或者操纵包括路径,以便其自己的目录来之前 $(top_builddir),或者操纵标题的文件,因为在我的情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top