Back to site

Використання Automake і Autoconf з C + +

Automake і Autoconf інструменти можуть бути використані для управління C + + проектів під Unix. Вони повинні заощадити багато часу в порівнянні з письмовою Makefile с і налаштувати сценарії вручну, забезпечуючи при цьому, що ваш проект структурований відповідно до GNU стандартів .

Тим не менш, важко для новачків, щоб почати. Сподіваюся, цей урок буде надавати достатньо інформації для C + + програмістів, які погано знайомі з Unix, щоб створити свій перший C + + проектів, а отримати поверхневе уявлення про те, що інструменти роблять.

Якщо ви виявите будь-які проблеми з цією сторінкою, ми вітаємо зворотний зв'язок або патчі проти приклад коду, який можна завантажити з Gitorious сторінці проекту . Або відправити запит злиття або електронною поштою murrayc@openismus.com .

зробити і налаштувати

Зробити інструмент може бути використаний для управління декількома проектами зробити файл використовує Makefile файл в папку проекту, в якому перераховані різні компіляції і компоновки кроки, цілі, і залежностей зробити добре пояснюється в .. C-сцени: Multi-File проекти і утиліти GNU Make .

Скрипт конфігурації можуть бути використані для допомоги крос-платформенний компіляції. Відповідного скрипта установки повинні інтерпретувати Makefile.in файл, а потім створити платформи Makefile файл. Він буде робити це після виконання кількох тестів, щоб визначити характеристики платформи.

Це дозволяє користувачеві ввести ./configure , а потім make для компіляції проекту з її системі.

Automake і Autoconf

Очевидно, що найбільш добре написані Make-файли та налаштування скриптів будуть виглядати дуже схожими. Насправді, GNU розробити керівні принципи про те, що повинно бути в цих файлах. Таким чином, створена GNU Automake і Autoconf, щоб спростити процес і переконатися, що Makefile і налаштувати сценарій відповідає GNU стандартам.

Ось коротке пояснення того, як ці кошти використовуються. Ви можете побачити приклади файлів, що використовуються цими інструментами в Приклад Файли розділі.

Примітка: ці інструменти використовують M4 мову програмування aclocal додає aclocal.m4 в каталог проекту, який визначає всі M4 макросів, які використовуються налаштування скрипта ..

Autoconf

Autoconf шукає файл з ім'ям configure.ac (або configure.in для зворотної сумісності). Потім він проходить М4 Макропорцесори створити скрипт конфігурації.

Всякий раз, коли ви додаєте макрос виклику configure.ac, aclocal повинні бути виконані, а також Autoconf, бо aclocal сканує configure.ac знайти якісь макроси вона повинна представляти. Однак у наші дні можна просто запустити autoreconf утиліта, яка дбає про тих деталей автоматично.

Рядки, які кожен configure.ac повинні мати

Кожен configure.ac повинні мати такі рядки наступне:

  AC_INIT ([Hello], [0,1], [bug-report@hello.example.com], [привіт], [http://hello.example.com/])

 AC_PREREQ ([2,59])
 AM_INIT_AUTOMAKE ([1.10 не визначають-])
 AC_CONFIG_HEADERS ([config.h])
 AC_PROG_CXX
 AC_CONFIG_FILES ([Makefile])

 AC_OUTPUT 

Макрос AC_INIT ініціалізує Autoconf з інформацією про проект, включаючи назву проекту, номер версії, помилка-звітності адресу, ім'я і архів домашній сторінці проекту.

AM_INIT_AUTOMAKE рядок додає кілька перевірок стандартних і ініціалізує Automake.

AC_PROG_CXX перевіряє наявність компілятора C + +. Якщо ваш проект використовує C, ви можете перевірити наявність компілятора C з AC_PROG_CC .

AC_CONFIG_FILES списки файлів, які будуть створені по configure . За замовчуванням кожний файл створюється на основі шаблону файл з таким же ім'ям, але з .in додано розширення.

AC_OUTPUT закінчує налаштувати обробку, і генерує вихідних файлів.

Використання конфігурації заголовка

AC_CONFIG_HEADERS ([config.h]) лінія означає, що ви будете використовувати файл config.h. Autoconf Потім необхідно config.h.in файл, який він обробляє, щоб створити файл config.h. Створений заголовок включений вихідний код, щоб забрати результати різних тестів конфігурації у вигляді визначень препроцесора макрос.

Config.h.in шаблон файлу також може бути автоматично згенерований autoheader інструмент. Autoreconf викликатиме autoheader коли AC_CONFIG_HEADERS використовується в configure.ac. Якщо кілька заголовків конфігурації використовуються, autoheader завжди буде генерувати тільки шаблон для першої в списку.

Automake

Automake шукає файл з ім'ям Makefile.am. Потім він створює Makefile.in, заснований на макроси, які він знаходить. Це в подальшому використовується при налаштуванні скрипта (див. вище).

GNU стилі проекти, чи ні

Оскільки Automake намагається зробити GNU стилі проекту за умовчанням, то це додасть копіювання файлів і скаржитися, якщо деякі інші необхідні інформативні текстові файли відсутні. На даний момент, ви можете створити порожні файли за допомогою наступної команди, і заповнити їх пізніше:

  сенсорний НОВИНИ README АВТОРИ ChangeLog 

Якщо ви не хочете, щоб ці GNU стилі файли, то ви можете додати "іноземних" аргументу, AM_INIT_AUTOMAKE виклик в configure.ac замість цього:

  AM_INIT_AUTOMAKE ([1.10 не-визначити зовнішні]) 
Розповідаючи Automake про ваших вихідних файлів

Використання ліній, як наступне ім'я вашої програми і список її вихідні файли:

  bin_PROGRAMS = привіт

 hello_SOURCES = hello.h hello.cc main.cc 

Зверніть увагу, що ім'я змінної hello_SOURCES має префікс імені цільового визначається призначення bin_PROGRAMS . Це звичайна практика з Autoconf і Automake. Точно так же префікс bin_PROGRAMS мінлива також має значення: Це відноситься до визначеної змінної bindir , який визначає каталог установки для видимих ??користувачем виконувані файли.

Таким чином, перше завдання інструктує Automake генерувати правила складання для виконуваного файлу, цільової називається "привіт", які будуть встановлені в каталог по bindir по виконанню make install . Друге присвоювання інструктує Automake для створення правил для побудови "привіт" мета з трьох C + + вихідний файлів у списку.

Весь процес

Припускаючи, що ви написали відповідні Makefile.am і configure.ac файлів (Є приклади нижче), ви повинні мати можливість побудувати свій проект за допомогою наступної команди:

  • «Сенсорний НОВИНИ README АВТОРИ ChangeLog '
  • "Autoreconf - сила - встановити" - запускає aclocal, Autoconf, Automake autoheader і в правильному порядку, щоб створити config.h.in, Makefile.in, налаштуванню і ряд допоміжних файлів
  • '. / Налаштувати' - створює Makefile з Makefile.in і config.h з config.h.in
  • 'Зробити'

Просто повторити останні три кроки, щоб повністю переналаштувати проект. Більшість проектів зберігаються в системі управління версіями є autogen.sh скрипт, який запускає все, аж до установки крок. Це зроблено, щоб забезпечити стандартні засоби для створення файлів збірки з нуля, як створені файли ніколи не повинні бути поставлені під контроль версій. Випуск архіви корабель із заздалегідь створені налаштування і Makefile.in файли, так що програма установки не потрібно мати Autoconf і Automake встановлені.

Підкаталоги

Файли проекту повинні, звичайно, буде організована в підкаталогах. В ідеалі, всі початкові файли повинні бути в директорію з ім'ям 'SRC' в каталозі проекту, з усіма іншими файлами (наприклад, make-файли, налаштувати сценарії та файли README) окремо у верхній частині. Проекти, які мають декілька рівнів каталогів називаються «глибокого» проектів. Необхідні заходи, перераховані тут, але ви повинні подивитися на приклад Файли розділ, щоб побачити їх у контексті.

Приклад файлів

Ось деякі configure.ac приклад і Makefile.am файлів. Вони є достатніми для управління C + + проект, який використовує тільки C + + Стандартна бібліотека.

У прикладі використовується нерекурсівние Makefile правила , що робить речі простіше і дозволяє швидше будує. Багато з існуючих проектів використовують рекурсивний зробити, з Makefile.am в кожному підкаталозі. Це створює невеликі, не встановлені бібліотеки в кожному каталозі, які повинні бути пов'язані один з одним (у правильному порядку) в двійковий файл. Це одна з головних проблем, з рекурсивними зробити.

Дивіться Automake і Autoconf посібників рекомендується прочитати розділ для отримання інформації про макроси та імен змінних, використовуваних у цих файлах.

Ці приклади для «глибокого» проект з наступною структурою:

  helloworld_cc

     autogen.sh
     configure.ac
     Makefile.am
     SRC

         helloworld.h
	 helloworld.cc
         main.cc
         foofiles

             foo.h
             foo.cc 

configure.ac

  AC_INIT ([Helloworld C + +], [0,5], [bug-report@hello.example.com]

              [Helloworld_cc], [http://hello.example.com/])
 AC_PREREQ ([2,59])
 AM_INIT_AUTOMAKE ([1.10-Wall не визначають-])
 AC_CONFIG_HEADERS ([config.h])

 AC_PROG_CXX
 AC_CONFIG_FILES ([Makefile])
 AC_OUTPUT 

Makefile.am

  AUTOMAKE_OPTIONS = підкаталог-об'єктів

 ACLOCAL_AMFLAGS = $ {} ACLOCAL_FLAGS

 bin_PROGRAMS = привіт
 hello_SOURCES = SRC / hello.h SRC / hello.cc SRC / main.cc \
                 SRC / Foo / foo.h SRC / Foo / foo.cc

 dist_noinst_SCRIPTS = autogen.sh 

Ви можете завантажити helloworld_cc-0.5.tar.gz смоли архів простий проект, наприклад, або переглядати джерело в Gitorious .Popular Links

Published (Last edited): Aug 22 , source: http://www.openismus.com/documents/linux/automake/automake