Тим не менш, важко для новачків, щоб почати. Сподіваюся, цей урок буде надавати достатньо інформації для C + + програмістів, які погано знайомі з Unix, щоб створити свій перший C + + проектів, а отримати поверхневе уявлення про те, що інструменти роблять.
Якщо ви виявите будь-які проблеми з цією сторінкою, ми вітаємо зворотний зв'язок або патчі проти приклад коду, який можна завантажити з Gitorious сторінці проекту . Або відправити запит злиття або електронною поштою murrayc@openismus.com .
Зробити інструмент може бути використаний для управління декількома проектами зробити файл використовує Makefile файл в папку проекту, в якому перераховані різні компіляції і компоновки кроки, цілі, і залежностей зробити добре пояснюється в .. C-сцени: Multi-File проекти і утиліти GNU Make .
Скрипт конфігурації можуть бути використані для допомоги крос-платформенний компіляції. Відповідного скрипта установки повинні інтерпретувати Makefile.in файл, а потім створити платформи Makefile файл. Він буде робити це після виконання кількох тестів, щоб визначити характеристики платформи.
Це дозволяє користувачеві ввести
./configure, а потімmakeдля компіляції проекту з її системі.
Очевидно, що найбільш добре написані 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_OUTPUTMakefile.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