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

mar*_*hon 4 automake autoconf makefile

假设我希望生成makefile将一些特定的头路径传递给g ++.

我需要添加到configure.ac或Makefile.am来指定这个?

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

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

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

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

Wil*_*ell 9

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

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

    CPPFLAGS="$CPPFLAGS -I/mypath/include"
    
    Run Code Online (Sandbox Code Playgroud)

    现在,任何使用autoconf生成的配置脚本和默认前缀(/usr/local)的包都将附加-I/mypath/include到,CPPFLAGS并且/mypath/include将找到标题.

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

    将相同的行指定CPPFLAGS$HOME/config.site,并CONFIG_SITE=$HOME/config.site在默认shell的环境中设置.现在,无论何时运行autoconf生成的配置脚本,$HOME/config.site都将进行分配.

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

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


daj*_*obe 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
Run Code Online (Sandbox Code Playgroud)