我目前正在开发一个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
文件了,因为它搜索了错误的目录。这看起来像是bug #16375的可能重复。有什么解决方法吗?
编辑2:
进一步深入网络后发现了两个更多的线程,其中讨论了此问题:#1327和automake-bug。已知一个可行方法是将--disable-dependency-tracking
选项传递给./configure
。对我来说至少还可以运行。
ACLOCAL_AMFLAGS
来设置宏路径 (-I ...
)。AM_INIT_AUTOMAKE
选项由AUTOMAKE_OPTIONS
设置:1.11 foreign
。就这样。 - ldav1stop_srcdir
切换为abs_top_srcdir
,将top_builddir
切换为abs_top_builddir
。嗯... - ldav1stop_builddir
或top_srcdir
的问题,但是这个问题在很多地方都出现了,特别是在 1.14.x 版本中。 - Brett HaleMakefile.am
文件吗? - Brett HaleMakefile.am
的内容。 - Marcel