我有一个包含标题的 C 文件。此标头位于不同的位置,具体取决于构建机器运行的 Linux 发行版。
使用自动工具检测不同位置的标头的最干净的方法是什么?
使用标准AC_CHECK_HEADERS
宏。
它将为标题创建正确的预处理器定义。
例如:
AC_CHECK_HEADERS([somepath/foo.h someotherpath/foo.h])
将创建预处理器定义HAVE_SOMEPATH_FOO_H
或HAVE_SOMEOTHERPATH_FOO_H
取决于找到的标头。如果两个标题都找到,或者两者都找到。使用这些宏来决定要包含哪个标头。
担心这些事情不是维护者的责任。任何合理构建的分发都将被设置,以便预处理器可以在它安装在系统上的任何位置找到头文件(而不是用户的 $HOME 或其他一些非标准位置)。如果将工具链安装在非标准位置,则设置工具链以查找标头是特定于平台的任务,在 Linux 中通过设置CPPFLAGS
. 例如,用户可能运行
./configure CPPFLAGS=-I/p/a/t/h
(使用旧版本的 autoconf 生成的配置脚本可能需要调用 be CPPFLAGS=-I/p/a/t/h ./configure
)或者她可以添加/p/a/t/h
到CPATH
,或使用任何其他可用的方法来通知预处理器在哪里查找包含文件。作为维护者,您需要做的就是确保配置脚本检查用户是否正确设置了工具链,您可以通过调用AC_CHECK_HEADERS
in来做到这一点configure.ac
:
AC_CHECK_HEADERS([foo.h])