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.
硬编码到包文件的路径绝对是错误的.如果您选择这样做,那么您需要知道您违反了使用autotools构建软件包的基本规则.如果/mypath/include在包文件中指定,则在要在所有计算机上工作的包中指定特定于您的计算机的内容; 显然这是错的.看起来你想要的是你的包(当你的机器上构建时)来查找头文件/mypath.如果不对包装进行混淆,这很容易实现.有(至少)3种方法:
使用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将找到标题.
如果您希望为所有构建(不仅仅是要安装的构建)进行分配/usr/local,您可以使用:
将相同的行指定CPPFLAGS在$HOME/config.site,并CONFIG_SITE=$HOME/config.site在默认shell的环境中设置.现在,无论何时运行autoconf生成的配置脚本,$HOME/config.site都将进行分配.
只需CPPFLAGS在默认shell的环境中指定.
与修改构建文件相比,所有这些解决方案都有两个主要优点.首先,它们将适用于所有autoconf生成的包(只要它们遵循规则并且不执行诸如CPPFLAGS在构建文件中分配用户变量之类的操作).其次,他们不会将您的机器特定信息放入应该适用于所有机器的软件包中.
因为问题是关于将什么放入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)