Mingw 自动生成:使用本地标题而不是已安装的标题

Mingw 自动生成:使用本地标题而不是已安装的标题,mingw,automake,Mingw,Automake,我最近把一些项目从香草制造转移到汽车制造。虽然我不是GNU自动工具的最大粉丝,但它们很好地解决了许多问题。(不,我不需要其他构建系统的建议。) 项目布局非常标准,我基本上有一个文件夹include包含公共标题,还有一个文件夹src包含源标题和私有标题。因为我使用C++,所以源需要包括公共标头。 基本解决方案是使用AM_CXXFLAGS,如下所示: AM_CXXFLAGS = -Iinclude CXXFLAGS := -Iinclude $(CXXFLAGS) -g -Wall 但我正在为M

我最近把一些项目从香草制造转移到汽车制造。虽然我不是GNU自动工具的最大粉丝,但它们很好地解决了许多问题。(不,我不需要其他构建系统的建议。)

项目布局非常标准,我基本上有一个文件夹include包含公共标题,还有一个文件夹src包含源标题和私有标题。因为我使用C++,所以源需要包括公共标头。 基本解决方案是使用AM_CXXFLAGS,如下所示:

AM_CXXFLAGS = -Iinclude
CXXFLAGS := -Iinclude $(CXXFLAGS) -g -Wall
但我正在为MinGW-W64和MSys工作。为了使mingw的行为类似于POSIX环境,即include from
/usr/include
/usr/local/include
,我适当地定义了变量
cppfagas
CFLAGS
cxflags

CPPFLAGS不是一个错误,它是针对预处理器的,配置需要这样做,否则它会抱怨

现在,一旦库“安装”到系统中并继续开发,我就遇到了一个问题,即标题是从
/usr/local/include
而不是本地文件夹中提取的。问题是
AM_cxflags
被追加到
cxflags
中,因此本地文件夹在搜索顺序中比系统文件夹晚

使用vanilla,在扩展
cxflags
时,您可以在include指令之前使用,如下所示:

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

这显然也适用于automake,但它需要是
CPPFLAGS
,因为libtool考虑了这一点。但汽车制造商有理由抱怨,
CPPFLAGS
被覆盖。有没有正确的方法可以做到这一点,或者我需要永远接受警告吗?(重新构造项目布局,这是唯一的其他解决方案。)

您写道您正在使用:

AM_CXXFLAGS = -Iinclude

这是错误的
-I
参数应该放在
AM\u CPPFLAGS
(C预处理器)变量中,因为它是计算
\include
宏的预处理器。

什么是自动生成版本?在这里,1.13.1
AM_CPPFLAGS
(这是您应该用于预处理器标志(如-I)的一个)在命令行中优先于CPPFLAGS。这是公平的。该页面还显示了如何定义自己的排序(例如使用
foo\u CPPFLAGS=$(AM\u CPPFLAGS)$(CPPFLAGS)
)。。。MinGW往往落后。我会调查这个问题。(当引入和/或升级automake时。)