Autotools条件包括

时间:2013-03-27 09:35:57

标签: c++ c makefile autotools

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

使用autotools检测不同位置的标头的最简洁方法是什么?

2 个答案:

答案 0 :(得分:4)

使用标准AC_CHECK_HEADERS宏。

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

例如:

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

将根据找到的标头创建预处理器定义HAVE_SOMEPATH_FOO_HHAVE_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])