automake:使用本地标头而不是安装

时间:2013-12-29 15:30:03

标签: mingw automake

我最近将一些项目从vanilla make迁移到了automake。虽然我不是GNU自动工具的最大粉丝,但他们很好地解决了很多问题。 (不,我不想要其他构建系统的建议。)

项目布局非常标准,我基本上有一个包含公共标题的 include 文件夹和一个包含源和私有标头的文件夹 src 。由于我使用的是C ++,因此需要包含公共标题。

基本解决方案是使用 AM_CXXFLAGS ,如下所示:

AM_CXXFLAGS = -Iinclude

但我正在为MinGW-W64和MSys工作。为了使mingw的行为类似于POSIX环境,包括/usr/include/usr/local/include,我会适当地定义变量CPPFLAGSCFLAGSCXXFLAGS。 / p>

CPPFLAGS不是一个错误,它是针对预处理器,配置需要这个或它会抱怨。

现在,一旦将库“安装”在系统中并继续开发,我就会遇到从/usr/local/include而不是本地文件夹中提取标题的问题。问题是AM_CXXFLAGS会附加到CXXFLAGS,因此本地文件夹的搜索顺序晚于系统文件夹。

使用vanilla使解决方案变得简单,当你在include指令之前扩展CXXFLAGS时,就像这样:

CXXFLAGS := -Iinclude $(CXXFLAGS) -g -Wall

这显然也适用于automake,除非它需要CPPFLAGS,因为libtool会考虑到这一点。但是,automake正确地抱怨CPPFLAGS被覆盖了。有没有正确的方法来做到这一点,还是我需要永远忍受警告? (重组项目布局,是唯一的其他解决方案。)

1 个答案:

答案 0 :(得分:1)

你写的是你正在使用的:

AM_CXXFLAGS = -Iinclude

这是不正确的; -I参数应放在AM_CPPFLAGS(C预处理器)变量中,因为它是评估#include宏的预处理器。