代码之家  ›  专栏  ›  技术社区  ›  Ender

如何使用自动工具构建特定组件?

  •  1
  • Ender  · 技术社区  · 9 年前

    我正在使用autotools,该树由同一项目的几个不同组件组成,不同组件之间共享不同的库。其目的是将组件分离并构建在具有不同体系结构的不同平台上,但目前整个项目是一棵树,所有的东西都是一次为x86_64构建的。

    我希望能够指定要为平台制作的组件,该组件将在该平台上运行、构建和安装。例如,在我看来,它可能如下所示:

    $ cd componentA-BUILD
    $ ../my-proj/configure --prefix=/install/A/here
    $ make componentA
    $ make install
    

    上面应该为x86_64构建组件A,并将其安装在配置的位置。

    $ cd componentB-BUILD
    $ ../my-proj/configure --prefix=/install/B/here
    $ make componentB
    $ make install
    

    这应该为ARM构建组件B,并将其安装在配置它的前缀位置(我还没有学会使用自动工具进行交叉编译)。

    1 回复  |  直到 9 年前
        1
  •  1
  •   ztik    9 年前

    虽然这并不是你想要达到的目标,但我的建议是使用 autoconf 的变量 $host (或 $target ,如果您正在交叉编译)。

    例如,添加您的 configure.ac 线条:

    case $host in
      x86_64-*-linux-gnu*)
        COMPDIRS="componentA"
        AC_PREFIX_DEFAULT(/install/A/here)
      ;;
      i386-*-linux-gnu*)
        COMPDIRS="componentB componentC"
        AC_PREFIX_DEFAULT(/install/B/here)
      ;;
    esac
    AC_SUBST(COMPDIRS)
    

    还可以更改您的 SUBDIRS 根变量 Makefile.am 如:

    SUBDIRS = $(COMPDIRS)
    

    在上述示例中 COMPDIR 根据主机系统获得不同的值。然后将此变量作为 分区 释义

    也可以使用 AC_PREFIX_DEFAULT 根据每个系统。