Autotools AM_CPPFLAGS(和其他)被忽略?

问题描述:

我的公司将某些头文件和库保存在非标准(但不更改)的位置。Autotools AM_CPPFLAGS(和其他)被忽略?

我在试图添加标题路径到版本。如果我定义环境变量CPPFLAGS,我可以添加标题搜索路径,并找到标题。但是,所有尝试从configure.ac或src/Makefile.am中设置搜索路径失败。

在SRC/Makefile.am我试图

AM_CPPFLAGS = -I/path/to/headers 

,但没有找到头。我尝试在configure.ac和Makefile.am中设置CPPFLAGS,但这不起作用。我试过

AC_SUBST(CPPFLAGS, ['-I/path/to/headers']) 

使用和不使用单引号,也没有运气

我试过放在src/Makefile.am

main_CPPFLAGS = -I/path/to/headers 

我宁愿没有设置一个环境变量。这需要额外的指令和额外的步骤来构建序列(和文档)。任何想法我失踪?

附录

我忘了提,我在MacOS为ARM主机(不是的iOS)交叉编译。

以下是src/Makefile.am的消毒版本。目前它有几种可能性。他们都没有得到编译器的-I标志。设置CPPFLAGS环境变量确实获取编译器的-I标志。

SUBDIRS = . 
bin_PROGRAMS = main 
main_SOURCES = first.h second.h main.cpp 
main_LDADD = -lone -ltwo 
main_CPPFLAGS = -I/path/to/headers 
AM_CPPFLAGS = -I/path/to/headers 
INCLUDES = -I/path/to/headers 
+0

您的'AM_CPPFLAGS = -I/path/to/headers'是正确的,它应该将-I选项传递给您的编译器。我能想到的不是这样的唯一原因是当你的automake版本很旧,或者因为交叉编译导致它与我以前的版本有所不同(我没有使用autotools来交叉编辑)。 –

如果构建系统应该是公开的,不要在你的Makefile.am硬编码的路径。

相反,如果它是一个内部生成你想要的解决方案是

INCLUDES = -Ipath/to/headers 
+0

完全内部。我们内部的标准地点。不幸的是,如果放在src/Makefile.am中,这不起作用。那是你想要的地方吗?我应该提到(编辑问题),我正在ARM的MacOS上进行交叉编译(不是iOS)。我可能会尝试在VirtualBox中构建Linux。 – garyp

+0

啊,确实会改变一些东西,'INCLUDES'是为了工作,但我不确定编译器会做什么。你能看看'-I $ path'是否完全传递给编译器吗?如果不是这样很奇怪,你能提供一个(正确命名的)'Makefile.am'的样本吗? –

+0

包含的路径没有出现在对编译器的调用中。但是,如果我设置了一个环境变量,它*会出现。我会发布Makefile.am – garyp

我不能把报价在评论...所以还是让我添加此这里。你的Makefile.am应该正式看起来像这样:“”

AM_CPPFLAGS = -I/path/to/headers 
bin_PROGRAMS = main 
main_SOURCES = first.h second.h main.cpp 
main_LDADD = -lone -ltwo 

,我搬到AM_CPPFLAGS顶端并删除了SUBDIRS,因为那些事情伤害了我的眼睛。