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

时间:2015-03-31 04:16:47

标签: autotools autoconf automake

我正在使用带有树的自动工具,该树由同一项目的几个不同组件组成,各种库在不同组件之间共享。目的是将组件分离并构建在具有不同体系结构的不同平台上,但是目前整个项目都是单个树,并且所有内容都为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进行交叉编译)。

1 个答案:

答案 0 :(得分:1)

虽然它并不完美,但我的建议是使用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的{​​{1}}变量,如:

Makefile.am

在上面的示例中,SUBDIRS = $(COMPDIRS) 根据主机系统获得不同的值。然后,此变量将作为COMPDIR定义传递。

此外,您可以根据每个系统使用SUBDIRS