15.4.1. Базовая теория make
15.4.1. Базовая теория make
При разработке программ на языках С или С++ важной частью для построения приложения является семейство команд компиляции и компоновки, необходимых для получения из файлов исходного кода работающих бинарных файлов. Ввод данных команд — длительная и кропотливая работа, и большинство современных сред разработки включают в себя способ помещения их в командные файлы или базы данных, которые можно автоматически вызывать для сборки приложения.
Unix-программа make(1), родоначальник всех этих средств, была разработана специально для того, чтобы помочь C-программистам управлять данными инструкциями. Она позволяет описать зависимости между файлами проекта в одном или нескольких "make-файлах". Каждый make-файл состоит из последовательности правил, каждое из которых указывает утилите make, что некоторый заданный целевой файл зависит от некоторого набора исходных файлов и определяет действия в случае, если любой из файлов исходного кода является более новым, чем целевой файл. Фактически программисту не требуется описывать все зависимости, поскольку программа make способна установить большинство очевидных зависимостей по именам файлов и расширениям.
Например, программист может указать в make-файле, что бинарный файл myprog зависит от трех объектных файлов myprog.о, helper.о и stuff.о. Если имеются файлы исходного кода myprog.с, helper.с и stuff.с, то утилита make без специальных указаний определит, что каждый .о-файл зависит от соответствующего .с-файла, и предоставит собственную стандартную инструкцию для сборки .о-файла из .с-файла.
Возникновение make связано с визитом ко мне Стива Джонсона (Steve Johnson — автор yacc и других программ). Когда он пришел, он был очень недоволен тем, что ему пришлось потратить впустую утро, занимаясь отладкой корректной программы (ошибка была устранена, файл не был откомпилирован, и, следовательно, cc *.о не работала). А поскольку я потратил часть предыдущего вечера, справляясь с той же проблемой в разрабатываемом мною проекте, у нас появилась идея создания инструмента для решения данной задачи. Все началось с тщательно продуманной идеи анализатора зависимостей, потом свелось к нечто более простому и в те же выходные превратилось в make. Использование инструментов, которые все еще оставались сырыми, было частью культуры. Make-файлы были текстовыми, а не "волшебно" закодированными бинарными файлами, поскольку это было в духе Unix: печатаемый, отлаживаемый, понятный материал.
Стюарт Фельдман.
После ввода команды make, в каталоге проекта программа make просматривает все правила и временные метки, после чего выполняет минимальный объем работы, необходимый для того, чтобы гарантировать актуальность производных файлов.
Хороший пример make-файла умеренной сложности можно взять из исходных кодов программы fetchmail. В дальнейших подразделах он будет рассматриваться снова.
Очень сложные make-файлы (особенно, когда они вызывают вспомогательные make-файлы) могут стать источником осложнений вместо того, чтобы упростить процесс сборки. Ставшее классическим предупреждение впервые прозвучало в статье "Recursive Make Considered Harmful"[131]. Аргумент в данной статье со времени ее публикации в 1997 году стал общепринятым и почти стал переворотом предыдущей практики в сообществе.
Обсуждение утилиты make(1) будет неполным без признания того факта, что она включает в себя одну из худших недоработок конструкции в истории Unix. Использование символов табуляции в качестве необходимых начальных символов командных строк, связанных с правилом, означает, что интерпретация make-файла может радикально измениться из-за невидимых различий в пустых пространствах.
Почему в столбце 1 используется табуляция? Yacc была новой программой, a Lex ещё более новой. Я их еще не попробовал, поэтому предположил, что это было бы хорошим поводом для обучения. После того как я запутался, впервые попробовав Lex, я просто сделал нечто простое с моделью "конец строки-табуляция". Конструкция работала, и поэтому осталась без изменений. А спустя несколько недель сформировалось сообщество пользователей (около десятка человек), причем большинство из них были моими друзьями, и я не хотел им навредить. Остальное, к сожалению, уже стало историей.
Стюарт Фельдман.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Базовая сетка
Базовая сетка В типографике базовой линией называют невидимую линию, на которой располагаются буквы. Например, нижний край буквы е лежит на базовой линии, а нижний выносной элемент буквы р находится под ней. Сетка образуется множеством базовых линий, расстояние между
Совет 46: Базовая защита
Совет 46: Базовая защита Пожалуй, каждый обитатель собственного дома или владелец дачи хоть раз мечтал об автоматической оборонительной системе, способной удерживать на расстоянии выстрела воров и продавцов краденного садового инструмента, шумные компании малолетней
Базовая архитектура драйверов
Базовая архитектура драйверов Драйвер устройства адресуется старшим номером (major number) устройства. Напомним, что среди атрибутов специальных файлов устройств, которые обеспечивают пользовательский интерфейс доступа к периферии компьютера, это число присутствует наряду
2.9 Базовая функциональность оконного менеджера
2.9 Базовая функциональность оконного менеджера Как уже говорилось, ключевой компонент графической платформы – Икс-сервер: захватывает оборудование, создает по запросу других программ (которые в этой терминологии называются X-клиентами) окна и предоставляет другим
3.1 Базовая функциональность «Мозилла»66
3.1 Базовая функциональность «Мозилла»66 Браузер. Для просмотра страниц WWW и «хождения» по FTP-серверам предназначен компонент «Навигатор». На панели компонент «Мозилла» он изображается морским штурвалом (см. рис. 3-1). Рис. 3-1Все возможности программы доступны из меню,
Make
Make Официальная ссылкаMake (3.79.1): ftp://ftp.gnu.org/gnu/make/Содержимое MakeПоследняя проверка: версия 3.79.1.ПрограммыmakeОписанияmakemake автоматически определяет, какие части объемной программы нуждаются в рекомпиляции, и выполняет все необходимые для этого команды.Зависимости MakeПоследняя
Базовая конфигурация DNS
Базовая конфигурация DNS Установка конфигурации DNS предполагает решение двух задач: настройка сервера DNS (в пакете BIND функции сервера выполняет программа named) и администрирование домена. В данном разделе обсуждаются особенности выполнения первой задачи, а
Базовая архитектура Skype
Базовая архитектура Skype Skype — программное обеспечение для VoIP, обеспечивающее бесплатную голосовую связь через Интернет между компьютерами, а также платные услуги для связи с абонентами обычной телефонной сети. В отличие от многих других программ IP-телефонии, для
8.9.3. Базовая настройка
8.9.3. Базовая настройка После установки системы LIDS в каталоге /etc у вас появится подкаталог /lids. В нем вы обнаружите четыре файла: lids.cap, lids.net, lids.pw, lids.conf.В первом из них хранятся текущие установки способностей (cap — от capabilities— способности). О том, что такое способности, мы
5. Базовая раскрутка партнерки
5. Базовая раскрутка партнерки Что делать для привлечения партнеров?? Рассказывайте о партнерской программе везде, на всех ваших сайтах – продающих и не продающих.? У профессионалов вы наверняка видели в конце каждого продающего текста или мини-сайта упоминание о
3.1 Базовая функциональность «Мозилла»
3.1 Базовая функциональность «Мозилла» Браузер. Для просмотра страниц WWW и «хождения» по FTP-серверам предназначен компонент «Навигатор». На панели компонент «Мозилла» он изображается морским штурвалом (см. рис. 3-1). Рис. 3-1Все возможности программы доступны из меню,
15.4.4.2. I make
15.4.4.2. Imake Утилита Imake была написана в попытке автоматизировать создание make-файлов для системы X Window. Она надстраивается на makedepend для решения как проблемы вывода зависимостей, так и проблемы переносимости.Imake-система эффективно заменяет традиционные make-файлы 1make-файлами,
Базовая конфигурация и утверждение
Базовая конфигурация и утверждение Основной список бизнес-процессов (Business Process Master List, BPML) — это самое полное представление рамок проекта внедрения SAP. Конфигурация делится на две части — базовая конфигурация и окончательная конфигурация.Эти конфигурационные задания
Базовая форма
Базовая форма Программный объект довольно простое существо, если известен класс, которому он принадлежит. Пусть O - объект. По определению он является экземпляром некоторого класса. Точнее, он является прямым экземпляром (direct instance) только одного класса, например C. С
Реймонд Эрик Стивен
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉