使用autoconf / automake,如何指定包含文件路径?

时间:2011-09-19 07:58:17

标签: makefile autoconf automake

假设我想让generate makefile将一些特定的头路径传递给g ++。

我需要添加什么来configure.ac或Makefile.am来指定它?

(注意 - 我不想在CPPFLAGS中使用./configure传递它。我希望在该步骤之前将这些路径放入其中)

编辑: 具体来说,我想包括让我们说/ usr / include / freetype和/ mypath / include。

我放了AC_CHECK_HEADERS([freetype / config / ftheader.h])并且它通过了,但似乎没有将它添加到-I传递给g ++。

我也尝试添加CPPFLAGS = -I。:/ usr / include / freetype:/ mypath / include,但它搞砸了并且把-I两次,第一次作为-I。它忽略了第二个-I。

2 个答案:

答案 0 :(得分:9)

进入包文件的硬编码路径绝对是错误的。如果您选择这样做,那么您需要知道您违反了使用autotools构建软件包的基本规则。如果在程序包文件中指定/mypath/include,则表示要在所有计算机上运行的程序包中指定计算机特定的内容。显然这是错的。看起来你想要的是你的包(在你的机器上构建时)来查找/mypath中的头文件。如果不对包装进行混淆,这很容易实现。有(至少)3种方法:

  1. 使用config.site文件。在/usr/local/share/config.site(必要时创建此文件)中,添加以下行:

    CPPFLAGS="$CPPFLAGS -I/mypath/include"
    

    现在任何使用autoconf生成的配置脚本和默认前缀(/usr/local)的软件包都会将-I/mypath/include附加到CPPFLAGS,并且会找到/mypath/include中的标头。< / p>

  2. 如果您希望为所有版本(不仅仅是/usr/local中安装的版本)进行分配,您可以使用:

    CPPFLAGS中添加指定$HOME/config.site的相同行,并在默认shell的环境中设置CONFIG_SITE=$HOME/config.site。现在,每当您运行autoconf生成的配置脚本时,都会进行$HOME/config.site的分配。

  3. 只需在默认shell的环境中指定CPPFLAGS

  4. 与修改构建文件相比,所有这些解决方案都有两个主要优势。首先,它们将适用于所有autoconf生成的包(只要它们遵循规则并且不执行诸如在构建文件中分配诸如CPPFLAGS的用户变量之类的事情)。其次,他们不会将您的机器特定信息放入应该适用于所有机器的软件包中。

答案 1 :(得分:8)

由于问题是关于将什么放入automakefile,我原以为AM_CPPFLAGS是用于为所有C / C ++编译添加包含和定义的正确变量。见http://www.gnu.org/software/automake/manual/html_node/Program-Variables.html

示例:

AM_CPPFLAGS = -I/usr/local/custom/include/path