2013-05-23 2 views
1

Я начинаю работу с autotools, и я работаю над проектом C, которому требуются разные пути сборки для разных архитектур (i386 и x86_64).Как создать код, зависящий от архитектуры/машины, с помощью autotools

До сих пор моя структура каталогов

/maindir 
     /arch 
      /i386/code.S 
      /x86_64/code.S 
     /src/main.c 
     /include/config.h 
       /other_header.h 

Я очень новый с Autotools, и я не понимаю их хорошо, я последовал за пару учебников, однако я не мог найти способ, чтобы указать другой каталог, основанный на архитектуре текущего процессора.

Может ли кто-нибудь предоставить мне короткий пример файлов makefile.am и configure.ac, чтобы это произошло? Большое спасибо.

ответ

3

Как правило, вы должны позвонить AC_CANONICAL_HOST где-нибудь в вашем configure.ac. Он установит переменную host_cpu, которую вы затем можете запросить.

Вот отрывок из примера configure.ac:

... 

AC_CANONICAL_HOST 

AS_CASE([$host_cpu], 
    [i?86], [ARCHDIR=arch/i386], 
    [x86_64], [ARCHDIR=arch/x86_64], 
    [AC_MSG_ERROR("No assembler code for CPU $host_cpu")] 
) 
AC_SUBST([ARCHDIR]) 

... 

(Обратите внимание, что i?86 используется для сопоставления i586, i686 и т.д.) При этом, вы можете использовать $(ARCHDIR) в вашем Makefile.am.

+0

Это замечательно, спасибо. Я нашел полуподобное решение с AC_SUBST и uname -m, но это намного более портативно, спасибо! – Morgawr

+1

Просто небольшое обновление, я понял, что вам действительно нужно использовать @ ARCHDIR @ в Makefile.am, а не $ (ARCHDIR). – Morgawr

Смежные вопросы