1

我有一个包含标题的 C 文件。此标头位于不同的位置,具体取决于构建机器运行的 Linux 发行版。

使用自动工具检测不同位置的标头的最干净的方法是什么?

4

2 回答 2

4

使用标准AC_CHECK_HEADERS宏。

它将为标题创建正确的预处理器定义。

例如:

AC_CHECK_HEADERS([somepath/foo.h someotherpath/foo.h])

将创建预处理器定义HAVE_SOMEPATH_FOO_HHAVE_SOMEOTHERPATH_FOO_H取决于找到的标头。如果两个标题都找到,或者两者都找到。使用这些宏来决定要包含哪个标头。

于 2013-03-27T09:43:23.820 回答
1

担心这些事情不是维护者的责任。任何合理构建的分发都将被设置,以便预处理器可以在它安装在系统上的任何位置找到头文件(而不是用户的 $HOME 或其他一些非标准位置)。如果将工具链安装在非标准位置,则设置工具链以查找标头是特定于平台的任务,在 Linux 中通过设置CPPFLAGS. 例如,用户可能运行

./configure CPPFLAGS=-I/p/a/t/h

(使用旧版本的 autoconf 生成的配置脚本可能需要调用 be CPPFLAGS=-I/p/a/t/h ./configure)或者她可以添加/p/a/t/hCPATH,或使用任何其他可用的方法来通知预处理器在哪里查找包含文件。作为维护者,您需要做的就是确保配置脚本检查用户是否正确设置了工具链,您可以通过调用AC_CHECK_HEADERSin来做到这一点configure.ac

AC_CHECK_HEADERS([foo.h])
于 2013-04-06T11:50:58.260 回答