【发布时间】:2014-03-03 19:01:06
【问题描述】:
我目前正在开发一个依赖递归 automake 进行构建的 C++ 项目。
我想建立一个共享库,库的src目录中的Makefile.am看起来像
# ...
# Library name
lib_LTLIBRARIES = libadapter-@MY_API_VERSION@.la
# Sources
libadapter_@MY_API_VERSION@_la_SOURCES = \
$(top_builddir)/src/sourceA.cpp \
$(top_builddir)/src/sourceB.cpp
# ...
从 1.14 版开始,当 configure.ac 中的 AM_INIT_AUTOMAKE 中未指定 subdir-objects 选项时,automake 会发出警告。但是,添加subdir-objects 选项似乎会中断构建过程,make 抱怨缺少.Plo 文件。我已经在网上搜索了遇到类似问题的人,但没有找到任何关于如何在不将项目更改为非递归项目的情况下解决问题的明智提示。非常感谢任何帮助。
编辑:
更深入地研究这个问题,我注意到./configure 在库的当前源目录下创建了一个字面上命名为$(top_builddir) 的目录,其中包含构建库所需的所有.Plo 文件。但是,在Makefile 中,我发现我的库源的.Plo 等效项(示例中为sourceA.cpp 和sourceB.cpp)以include $(top_builddir)/src/$(DEPDIR)/ 为前缀,$(top_builddir) 是一个定义为相对路径(即../../../src/.deps/)。现在很清楚为什么make 找不到.Plo 文件,因为它搜索了错误的目录。这看起来可能是错误#16375 的重复。有什么解决方法吗?
编辑 2:
在网络上进一步挖掘发现了另外两个解决该问题的线程:#1327 和automake-bug。一个已知的解决方法似乎是将--disable-dependency-tracking 选项传递给./configure。至少对我来说它有效。
【问题讨论】:
-
您是否使用relative paths 作为源?
-
FWIW,我在 automake 1.14 中也收到了这条消息(非递归构建,没有相对路径)。目前,我的策略是忽略警告,直到我找到不搞砸构建的方法。似乎可以构建(现在......)。
-
@ldav1s - 有趣。您在顶级 Makefile.am 中使用 ACLOCAL_AMFLAGS 吗? AM_INIT_AUTOMAKE 选项呢?
-
我使用
ACLOCAL_AMFLAGS只是为了设置宏路径(-I ...)。AM_INIT_AUTOMAKE选项由AUTOMAKE_OPTIONS:1.11 foreign设置。就是这样。 -
OTOH,也许我不使用相对路径。也许我必须将
top_srcdir切换到abs_top_srcdir和top_builddir到abs_top_builddir。嗯……
标签: autotools autoconf automake libtool