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