Скоро в деле
Главные выводы
Если вы когда-либо устанавливали программное обеспечение из исходного кода, скорее всего, вы использовали Make. Но что это за программа и как она работает? Узнайте все о makefiles и о том, как они могут изменить ваш процесс сборки.
Что такое компиляция?
Makefiles и компиляция неразрывно связаны. Хотя они не предназначены только для компиляции, программа Make появилась из-за проблем, связанных с компиляцией.
Компиляция берет исходные файлы и преобразует их в другую форму. Классическим примером является .c файл, который компилируется в .o объектный файл. Программы на C также проходят процесс связывания, который преобразует .o файлы в финальный исполняемый файл. Фактически, в процессе сборки проекта на C есть четыре отдельных этапа:
Компиляция стала популярной в начале 1970-х годов с развитием языка C, но новые языки, такие как Typescript, Rust и Sass, также используют компиляцию. Альтернативой компиляции является интерпретация, которая использует промежуточную программу для выполнения кода вместо генерации самостоятельного исполняемого файла. Интерпретируемые языки включают JavaScript, Python и Ruby.
Скомпилированные программы обычно работают быстрее—иногда значительно быстрее—чем интерпретируемые. Компиляция также проверяет ваш код на определенные типы ошибок, которые интерпретация может обнаружить только во время выполнения, поэтому легче убедиться, что скомпилированные программы корректны. Однако компиляция может быть медленным процессом, особенно для проектов с сотнями или тысячами исходных файлов.
Что делают makefiles?
Makefiles используются в программе Make, которая помогает автоматизировать процесс сборки, включая такие задачи, как компиляция.
Когда вы запускаете команду make, она по умолчанию ищет файл с названием Makefile или makefile. Этот файл должен содержать инструкции о том, как компилировать—или строить—каждый файл в вашей программе.
Makefiles строятся вокруг концепции "зависимости" (или "предварительного условия"), которую Make проверяет с помощью меток времени файлов. Это означает, что Make может значительно ускорить компиляцию: вместо того чтобы перекомпилировать каждый исходный файл, Make восстанавливает только минимально необходимое. В общем, если исходный файл изменился, Make перекомпилирует его, иначе оставляет без изменений.
Как выглядят makefiles?
Первая вещь, которую вы должны знать о makefiles, это то, что пробелы имеют значение. Это широко считается плохим дизайнерским решением, но мы с этим ничего не можем поделать, так что будьте осторожны!
Makefile содержит серию правил, которые описывают, как строить каждый компонент. Общий шаблон правила выглядит так:
Вот, по сути, самый простой makefile, который компилирует один исходный файл в исполняемый файл:
Вторая строка этого makefile отступает, и отступ должен состоять из одного символа табуляции. Будьте очень внимательны, сохраняя единственный символ табуляции в начале строк с отступами, независимо от того, копируете вы или набираете makefile вручную. Если, например, вы используете четыре пробела вместо табуляции, вы увидите ошибку, такую как "Makefile:2: *** отсутствует разделитель. Стоп."
В этом примере цель—имя финального исполняемого файла: program. Цель не обязательно должна совпадать с именем файла, но обычно это так.
У этой цели всего одна зависимость—program.c—которую Make будет использовать для принятия решения, что делать. Если файл "program" новее, чем "program.c", Make ничего не сделает.
Написание вашего первого makefile
Нет ничего лучше практического опыта, и, к счастью, Make довольно легко использовать в его самой простой форме.
Установка Make
На дистрибутиве Linux, который использует apt, таком как Ubuntu, Mint или Debian, вы можете установить Make следующим образом:
На macOS вы можете установить Make через Xcode, выполнив эту команду:
В качестве альтернативы, если у вас установлен Homebrew, выполните:
Если вы видите ошибку "make: команда не найдена", когда пытаетесь запустить её, значит, программа make не установлена в вашем PATH. Вы можете исправить эту проблему, проверив, корректно ли она установлена.
Написание простой тестовой программы
Вы можете увидеть Make в действии, протестировав вышеприведенный makefile с простой программой на C. Вам просто нужно установить gcc и make, чтобы попробовать это.
Создайте файл с именем "program.c" и заполните его следующим содержимым:
На этом этапе проверьте, что ваша программа верна (и что у вас установлен gcc) с помощью следующей команды:
Подтвердите, что gcc успешно собирает программу, а затем удалите её:
Напишите базовый Makefile
Теперь создайте пример makefile (как "Makefile" или "makefile") со следующим содержимым:
Запустите Make
В терминале убедитесь, что ваш рабочий каталог содержит файлы Makefile и program.c, затем выполните Make:
Как только вы подтвердите, что Make скомпилировал и собрал вашу программу, протестируйте её работу, запустив её снова:
Make сообщает вам, что всё актуально, поэтому теперь ничего не делает. Это одно из главных преимуществ Make: он тратит время только на сборку компонентов, которые необходимо восстановить. Попробуйте обновить ваш исходный файл, и вы увидите разницу:
Команда touch здесь просто обновляет время изменения файла до текущего. Это просто быстрый способ "обманывать" Make, заставляя его думать, что файл изменился.
Что ещё может делать Make?
Make ограничен лишь своей файловой природой. Любой файл может быть частью вашего процесса сборки и выступать в роли цели или зависимости.
Это означает, что Make подходит для широкого круга проектов. Всё, что имеет предсказуемые и повторяемые шаги сборки, является подходящим.
Например, возьмите генератор статических сайтов, который создает веб-страницы из других источников, часто включая файлы текстов на Markdown. Этот makefile будет пересобирать конкретную веб-страницу:
Мы только коснулись верхушки айсберга того, что может делать Make. На самом деле makefiles содержат шаблоны для определения правил для многих различных файлов, создавая сложные цепочки зависимостей.
В следующий раз, когда вы будете собирать программное обеспечение, проверьте, есть ли makefile, и попытайтесь исследовать его содержимое. Надеюсь, вы сможете понять некоторые основные вещи и осознать, что происходит под капотом. С руководством GNU make у вас есть возможность начать использовать Make для ваших собственных проектов, чтобы избежать ненужного времени простоя.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Вы также можете читать меня в:
- Telegram: https://t.me/gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru