繁体   English   中英

自动工具和带有普通Makefile的嵌套项目项目

[英]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

可悲的是,没有以下任何一项,您将无法正确实现:

  1. 修改/替换上游Makefile,
  2. 为上游库添加自己的生成规则,并忽略其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目标( allinstall等),因此,在您的情况下,还需要在项目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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM