2015-03-31 24 views
1

我正在使用自动工具与由同一项目的多个不同组件组成的树以及在不同组件之间共享的各种库。目的是让组件分离并构建在具有不同架构的不同平台上,但是目前整个项目是单一树,并且所有组件都一次为x86_64构建。如何使用自动工具创建特定组件?

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

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

上面应该建立componentA为x86_64的,并为其配置该位置安装。

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

这应该建立以componentB为ARM和它被配置为与该前缀位置(我还没有学会使用自动工具交叉编译)安装。

+0

我错过了这个问题。交叉构建体系结构通常作为配置参数传递。见http://www.gnu.org/software/automake/manual/html_node/Cross_002dCompilation.html – arved 2015-03-31 09:59:20

+0

忘记交叉编译,我会一步一步来。问题是如何在许多组件的树中构建特定组件。所以如果它包含组件A,B和C,我该如何构建组件A?我现在拥有它的方式是整个树的构建。 – Ender 2015-03-31 16:59:20

回答

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) 

另外改变根Makefile.amSUBDIRS变量:

SUBDIRS = $(COMPDIRS) 

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

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

相关问题