如何使用 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.am
的 SUBDIRS
变量,例如:
SUBDIRS = $(COMPDIRS)
在上面的示例中,COMPDIR
根据主机系统获得不同的值。然后这个变量作为 SUBDIRS
定义传递。
也可以根据各个系统使用AC_PREFIX_DEFAULT
我将 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.am
的 SUBDIRS
变量,例如:
SUBDIRS = $(COMPDIRS)
在上面的示例中,COMPDIR
根据主机系统获得不同的值。然后这个变量作为 SUBDIRS
定义传递。
也可以根据各个系统使用AC_PREFIX_DEFAULT