[英]Autotools and a nested project project with ordinary Makefile
这个问题扩展了问题: 如何使用自动工具处理子项目?
所以我在modules / libfoo中有一些带有自己的Makefile(不是GNU autotools)的项目
我添加了SUBDIRS = include / jsonbox Makefile.am,它可以正常编译,但前提是我调用./configure并从顶层目录进行make。
如果创建一个子目录,请说build,然后从中运行../configure,在make时会出错:
Making all in modules/libfoo
/bin/sh: line 17: cd: modules/libfoo: No such file or directory
make: *** [all-recursive] Error 1
有可能处理吗? 我需要针对不同的拱门和CFLAGS的多个构建目录。
编辑:由于它在文档中建议,我在一个嵌套项目中创建了一个GNUmakefile.in。 但是它仍然不能与VPATH一起使用:
Making all in modules/libfoo
make[1]: Entering directory `/home/galadog/test/build/moudles/libfoo'
GNUmakefile:2: Makefile: No such file or directory
make[1]: *** No rule to make target `Makefile'. Stop.
make[1]: Leaving directory `/home/galadog/test/build/moudles/libfoo'
make: *** [all-recursive] Error 1
Edit2实际的Makefile可以在这里看到: https : //github.com/anhero/JsonBox/blob/master/Makefile
可悲的是,没有以下任何一项,您将无法正确实现:
您链接的文档主要侧重于使用make distcheck
解决问题,而不支持实际构建。
但是,有一个简单的技巧可以用最少的工作量来完成-将整个子树复制到build目录。 这不是一个很好的解决方案,但是它将使子树构建正常工作:
SUBDIRS = modules/libfoo
# and possibly all other -recursive targets you'll be using
all-recursive: copy-libfoo
copy-libfoo:
mkdir -p modules
cp -R -H $(top_srcdir)/modules/libfoo modules/
但是正如我所说,这很丑。 上游Makefile仍然需要定义正确的automake目标( all
, install
等),因此,在您的情况下,还需要在项目GNUmakefile
中添加GNUmakefile
,例如:
include Makefile
INSTALL:
这将提供一个虚拟目标以避免*** No rule to make target 'install'
; 可能也是这样。 如果要使用make dist
,则使用EXTRA_DIST
,但这已在链接文档中进行了介绍。
老实说,您在湿滑的地面上。 如果我是您,我要么只是不使用那个项目,要么忽略它,因为维护它比从头开始写相同的东西要困难。
我会考虑的第二种解决方案是正确的一种方法是在主Makefile.am
复制Makefile.am
,而不对该子目录使用递归automake:
LIBRARIES = modules/libfoo/libfoo.a
modules_libfoo_libfoo_a_SOURCES = modules/libfoo/src/a.c # ...
# and possibly some...
EXTRA_DIST = # ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.