如何使用 autotools 构建特定组件?

How to build a specific component(s) with autotools?

我将 autotools 与一棵树一起使用,该树由同一项目的几个不同组件组成,具有在不同组件之间共享的各种库。目的是将组件分开并构建在具有不同体系结构的不同平台上,但目前整个项目是一棵树,所有内容都一次性构建 x86_64.

我希望能够指定我想为 运行 所在的平台创建、构建和安装哪个组件。例如,在我看来它可能看起来像下面这样:

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

上面应该为 x86_64 构建 componentA 并将其安装在配置的位置。

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

这应该为 ARM 构建 componentB 并将其安装在为其配置的前缀位置(我还没有学会使用 autotools 进行交叉编译)。

虽然你想要达到的效果并不完美,但我的建议是使用 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)

同时更改根 Makefile.amSUBDIRS 变量,例如:

SUBDIRS = $(COMPDIRS)

在上面的示例中,COMPDIR 根据主机系统获得不同的值。然后这个变量作为 SUBDIRS 定义传递。

也可以根据各个系统使用AC_PREFIX_DEFAULT