Читати онлайн Мистецтво програмування для Unix автора Реймонд Ерік Стівен - RuLit - Сторінка 217

dist

Створення архіву вихідного коду (зазвичай за допомогою програмиtar(1)),який можна розповсюджувати як єдине ціле та використовувати для складання програми заново на іншій машині. Метою даної директиви є створення еквівалентного коду, що залежить відall таким чином, щоб правилоmake dist автоматично наново збирало цілий проект, перш ніж створити його дистрибутивний архів. Це хороший спосіб уникнути помилок, в результаті яких у дистрибутив не включаються дійсно необхідні похідні файли (наприклад, простий текстовий файл READMEfetchmail,який фактично генерується з HTML-файлу).

distclean

Відкидає все, крім того, що розробник включив би у разі упаковки вихідного коду за допомогою командиmake dist. у будь-якому випадку включати як окреме правило для документування того, що відбувається. Якщо дія відрізняється, то зазвичай вона відрізняється відкиданням локальних конфігураційних файлів, які не є частиною звичайної послідовності складанняmake all (такі як послідовність, згенерована утилітоюautoconf( 1 )\ autoconf(1)розглядається у розділі 17).

realclean

Відкидає все, що може бути заново зібрано за допомогою цього make-файлу. Дія може бути такою ж, якmake distclean, таrealcleanслід у будь-якому випадку включати як окреме правило для документування того, що відбувається. Якщо дія відрізняється, то зазвичай вона відрізняється відкиданням файлів, які є похідними, але (з якоїсь причини) так чи інакше поставляються з вихідними кодами проекту.

install

Інсталяція виконуваних файлів проекту та документації до системних каталогів таким чином, щоб вони були доступні користувачам (зазвичай ця операція вимагає повноважень адміністратора). Ініціалізація або оновлення баз даних або бібліотек, які необхідні файлам для роботи.

uninstall

Видалення файлів, встановлених у системні каталоги командоюmake install (зазвичай ця операція вимагає повноважень адміністратора). Ця операція має бути повністю протилежноюmake install. Це правило означає підпорядкування угодам, які шукають досвідчені користувачі Unix, тому що для них вони є підтвердженням продуманої конструкції. Навпаки, його відсутність є у разі недбалістю і (наприклад, коли під час інсталяції створюються великі файли бази даних) може розглядатися як некомпетентність і неуважність.

Приклади всіх стандартних цілей, що працюють, доступні для вивчення в шаку-файлі програмиfetchmail.Їх вивчення дозволить зрозуміти модель і повніше вивчити структуру пакетаfetchmail.Однією з переваг використання даних стандартних правил є те, що вони утворюють повну схему проекту.

Однак для розробника немає необхідності обмежувати себе цими правилами. Якось навчившись використовуватиmake,розробник виявляє, що він все частіше використовує механізм make-файлів для автоматизації невеликих завдань, які залежать від стану файлів проекту. Маке-файл проекту – зручна центральна точка для організації цих завдань. Його використання робить їх доступними для вивчення і дозволяє уникнути захаращення робочої області проекту невеликими випадковими сценаріями.

15.4.4. Генерація make-файлів

Однією з неочевидних перевагUnixmakeпорівняно з базами даних залежностей, вбудованих у багато IDE-середовища, і те, що make-файли є прості текстові файли, тобто. файли, які можуть створюватись програмами.

У середині 1980-х років у дистрибутивах великих Unix-програм були досить поширені складні спеціальні shell-сценарії, які досліджували оточення та використали зібрану інформацію для створення нестандартних make-файлів. Такі спеціальні конфігуратори досягали абсурдних розмірів. Автор цієї книги одного разу написав такий конфігуратор, що складається з 3000 рядків shell-коду, майже вдвічі більше за будь-який окремий модуль програми, для якої він був призначений, і це не було незвичайним.

Одного разу було вирішено покласти цьому кінець, і багато представників спільноти налаштувалися на написання інструментів, які б автоматизували частину або весь процес супроводу make-файлів. Дані інструментальні засоби були покликані вирішити дві проблеми.