假设我想让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。
答案 0 :(得分:9)
进入包文件的硬编码路径绝对是错误的。如果您选择这样做,那么您需要知道您违反了使用autotools构建软件包的基本规则。如果在程序包文件中指定/mypath/include
,则表示要在所有计算机上运行的程序包中指定计算机特定的内容。显然这是错的。看起来你想要的是你的包(在你的机器上构建时)来查找/mypath
中的头文件。如果不对包装进行混淆,这很容易实现。有(至少)3种方法:
使用config.site文件。在/usr/local/share/config.site
(必要时创建此文件)中,添加以下行:
CPPFLAGS="$CPPFLAGS -I/mypath/include"
现在任何使用autoconf生成的配置脚本和默认前缀(/usr/local
)的软件包都会将-I/mypath/include
附加到CPPFLAGS
,并且会找到/mypath/include
中的标头。< / p>
如果您希望为所有版本(不仅仅是/usr/local
中安装的版本)进行分配,您可以使用:
在CPPFLAGS
中添加指定$HOME/config.site
的相同行,并在默认shell的环境中设置CONFIG_SITE=$HOME/config.site
。现在,每当您运行autoconf生成的配置脚本时,都会进行$HOME/config.site
的分配。
只需在默认shell的环境中指定CPPFLAGS
。
与修改构建文件相比,所有这些解决方案都有两个主要优势。首先,它们将适用于所有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