Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 自动工具和带有普通Makefile的嵌套项目_Linux_Autotools_Makefile Project - Fatal编程技术网

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

Linux 自动工具和带有普通Makefile的嵌套项目,linux,autotools,makefile-project,Linux,Autotools,Makefile Project,这个问题延伸了这个问题 因此,我有一些项目在中有自己的Makefile(不是GNU自动工具) 模块/libfoo 我添加了SUBDIRS=include/jsonbox Makefile.am,它可以很好地编译,但只有在调用/configure和make from top dir时才可以 如果我创建了一个subdir,比如build,然后从中运行../configure,那么我在make过程中遇到了一个错误: Making all in modules/libfoo /bin/sh:

这个问题延伸了这个问题

因此,我有一些项目在中有自己的Makefile(不是GNU自动工具) 模块/libfoo

我添加了SUBDIRS=include/jsonbox Makefile.am,它可以很好地编译,但只有在调用/configure和make from top dir时才可以

如果我创建了一个subdir,比如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
有可能处理这件事吗?我需要几个不同拱门和CFLAG的构建目录

编辑: 如中所示,我在一个嵌套项目中创建了一个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可以在这里看到:

遗憾的是,如果没有以下两种方法,您就无法正确实现这一目标:

  • 修改/替换上游生成文件
  • 为上游库添加自己的make规则并忽略它们的Makefile
  • 您链接的文档主要集中在使用
    make distcheck
    解决问题,而不支持实际构建

    然而,有一种简单的方法可以用最少的工作量工作——将整个子树复制到构建目录。这不是一个很好的解决方案,但它会使子树构建正常工作:

    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/
    
    但正如我所说,这很难看。上游生成文件仍然需要定义正确的自动生成目标(
    all
    install
    等),因此在您的情况下,您最好在项目子目录中添加一个
    GNUmakefile
    ,如:

    include Makefile
    INSTALL:
    
    这将提供一个虚拟目标,以避免
    ***没有规则使目标“安装”
    ;也可能是这样。如果您想使用
    make DIST
    ,则使用
    EXTRA\u DIST
    ,但链接文档中已包含所有内容


    老实说,你的处境很艰难。如果我是你,我要么干脆不使用这个项目,要么就忽略它,因为维护它比从头开始写同样的东西更难

    第二个我会考虑的解决方案,一个正确的方法是在主代码< >文件>中复制Mag文件。

    LIBRARIES = modules/libfoo/libfoo.a
    
    modules_libfoo_libfoo_a_SOURCES = modules/libfoo/src/a.c # ...
    
    # and possibly some...
    EXTRA_DIST = # ...
    

    遗憾的是,如果没有以下两种情况,您就无法正确实现这一目标:

  • 修改/替换上游生成文件
  • 为上游库添加自己的make规则并忽略它们的Makefile
  • 您链接的文档主要集中在使用
    make distcheck
    解决问题,而不支持实际构建

    然而,有一种简单的方法可以用最少的工作量工作——将整个子树复制到构建目录。这不是一个很好的解决方案,但它会使子树构建正常工作:

    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/
    
    但正如我所说,这很难看。上游生成文件仍然需要定义正确的自动生成目标(
    all
    install
    等),因此在您的情况下,您最好在项目子目录中添加一个
    GNUmakefile
    ,如:

    include Makefile
    INSTALL:
    
    这将提供一个虚拟目标,以避免
    ***没有规则使目标“安装”
    ;也可能是这样。如果您想使用
    make DIST
    ,则使用
    EXTRA\u DIST
    ,但链接文档中已包含所有内容


    老实说,你的处境很艰难。如果我是你,我要么干脆不使用这个项目,要么就忽略它,因为维护它比从头开始写同样的东西更难

    第二个我会考虑的解决方案,一个正确的方法是在主代码< >文件>中复制Mag文件。

    LIBRARIES = modules/libfoo/libfoo.a
    
    modules_libfoo_libfoo_a_SOURCES = modules/libfoo/src/a.c # ...
    
    # and possibly some...
    EXTRA_DIST = # ...
    

    你能修改该子项目的Makefile吗?还是它是第三方Makefile?@michal gorny这是最坏的情况,但如果没有其他解决方案,我可以。你能为我们粘贴
    Makefile
    ?也许它已经有了某种build dir/VPATH支持,但老实说,我对此表示怀疑。@MichałGóny看到更新的postCan您可以修改该子项目的Makefile还是第三方Makefile?@michal gorny这是最坏的情况,但如果没有其他解决方案,我可以。您可以为我们粘贴
    Makefile
    ?也许它已经有了某种build dir/VPATH支持,但老实说,我对此表示怀疑。@MichałGórny请参阅更新后的帖子,因此我添加了Makefile.am和configure.ac以与libtool一起使用。我认为这是唯一的解决办法,虽然很悲哀,但却是真的。不,这里不需要libtool。如果要构建共享库或使用
    LTLIBRARIES
    ,则需要libtool。Automake可以处理常规的
    本身。因此,我添加了Makefile.am和configure.ac以与libtool一起使用。我认为这是唯一的解决办法,虽然很悲哀,但却是真的。不,这里不需要libtool。如果要构建共享库或使用
    LTLIBRARIES
    ,则需要libtool。Automake可以自行处理常规
    库。