2015-03-31 6 views
1

Я использую autotools с деревом, состоящим из нескольких разных компонентов одного и того же проекта с различными библиотеками, которые совместно используются компонентами differnet. Цель состоит в том, чтобы компоненты были разделены и построены на разных платформах с различными архитектурами, но в настоящее время весь проект представляет собой единое дерево, и все все сразу создается для x86_64.Как создать определенный компонент (ы) с помощью autotools?

Я хотел бы указать, какой компонент я хотел бы сделать для платформы, на которой он будет запускаться, строить и устанавливать его. Например, в моем мышлении это может выглядеть примерно следующее:

$ 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 и установить его в месте приставки, для которой он был настроен (я до сих пор не научился кросскомпилирую с Autotools).

+0

Упущенный вопрос. Архитектура для перекрестного соединения обычно передается как параметр configure. см. http://www.gnu.org/software/automake/manual/html_node/Cross_002dCompilation.html – arved

+0

Забудьте о кросс-компиляции, я сделаю это шаг за шагом. Вопрос заключается в том, как создавать конкретные компоненты в дереве многих компонентов. Итак, если он содержит компоненты A, B и C, как мне просто построить компонент A? То, как я в настоящее время имею это, - это все дерево. – Ender

ответ

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 переменную корня Makefile.am как:

SUBDIRS = $(COMPDIRS) 

В приведенном выше примере, COMPDIR получить различные значения в зависимости к хост-системы. Затем эта переменная передается как определение SUBDIRS.

Также вы можете использовать AC_PREFIX_DEFAULT в соответствии с каждой системой.