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