Разработка приложений в среде Linux - [13]

Шрифт
Интервал

>all: foo bar baz FORCE

>FORCE:

Это срабатывает только тогда, когда нет файла по имени >FORCE.

Элементы в списках зависимостей могут быть именами файлов, но, поскольку это касается >make, они являются целевыми объектами. Элемент >foo в списке зависимости >install — это целевой объект. При попытке >make вычислить зависимость >install становится ясно, что в первую очередь необходимо вычислить зависимость >foo. А для этого >make потребуется вычислить зависимости >foo.о, >bar.о и >baz.о.

Обратите внимание на отсутствие строк, явно указывающих >make, как строить >foo.о, >bar.о или >baz.о. Вы не будете определять эти строки непосредственно в редакторе. >make обеспечивает предполагаемые зависимости, которые записывать не нужно. Если в файле есть зависимость, заканчивающаяся на >.о, и есть файл с таким же именем, но он заканчивается на >.с, >make предполагает, что этот объектный файл зависит от исходного файла. Встроенные суффиксные правила, которые поддерживаются >make, позволяют значительно упростить многие >make-файлы и, если встроенное правило не соответствует требованиям, можно создать свои собственные суффиксные правила (речь об этом пойдет ниже).

По умолчанию >make прекращает работу, как только любая из заданных команд дает сбой (возвращает ошибку). Существуют два способа избежать этого.

Аргумент >-k заставляет >make создавать максимально возможное количество файлов без останова, даже если какая-то команда вернула ошибку. Это полезно, например, при переносе программы; можно построить столько объектных файлов, сколько нужно, а потом перенести файлы, которые вызвали ошибку, без нежелательных перерывов в работе.

Если известно, что какая-то одна команда будет всегда возвращать ошибку, но вы хотите проигнорировать ее, можно воспользоваться "магией" командной оболочки. Команда >/bin/false всегда возвращает ошибку, таким образом, >/bin/false всегда будет вызывать прекращение работы, если только не указана опция >-k. С другой стороны, конструкция >любая_команда || /bin/true никогда не вызовет прекращение работы; даже если >любая_команда возвращает >false, оболочка затем запускает >/bin/true, которая вернет успешный код завершения.

>make интерпретирует нераспознанные аргументы командной строки, которые не начинаются с минуса (>-), как целевые объекты для сборки. Таким образом, >make install приводит к сборке целевого объекта >install. Если целевой объект >foo устарел, make сначала соберет зависимости >foo, а затем инсталлирует его. Если требуется собрать целевой объект, начинающийся со знака минус, этот знак перед именем целевого объекта должен быть продублирован (>--).

4.2.1 Сложные командные строки

Каждая командная строка выполняется в своей собственной подоболочке, таким образом, команды >cd в командной строке влияют только на строку, в которой они записаны. Любую строку в make-файле можно расширить на множество строк, указывая в конце каждой обратный слэш. Ниже показан пример того, как иногда могут выглядеть командные строки.

> 1: cd первый_ каталог; \

> 2:  сделать что-то с файлом $ (FOO) ; \

> 3:  сделать еще что-то

> 4: cd второй_каталог; \

> 5:  if [ -f некоторый_файл ] ; then\

> 6:   сделать что-то другое; \

> 7:  done; \

> 8:  for i in * ; do \

> 9:   echo $$i >> некоторый__файл ; \

>10:  done

>make находит в этом фрагменте кода только две строки. Первая командная строка начинается в строке 1 и продолжается до строки 3, а вторая начинается в строке 4 и заканчивается в строке 10. Здесь следует отметить несколько моментов.

• >второй_каталог является относительным не к каталогу >первый_каталог, а к каталогу, в котором запущен >make, поскольку эти команды выполняются в разных подоболочках.

• Строки, образующие каждую командную строку, передаются оболочке в виде одной строки. Таким образом, все символы >;, которые нужны оболочке, должны присутствовать, включая даже те, которые обычно в сценариях оболочки опускаются, поскольку их наличие подразумевается благодаря символам новой строки. Более детально о программировании программной оболочки рассказывается в [22].

• Если требуется разыменовывать переменную >make, это делается обычным образом (то есть >$(переменная)), но если нужно разыменовывать переменную оболочки, необходимо применять двойной символ >$: >$$i.

4.2.2. Переменные

Часто бывает необходимо определить только один компонент переменной за раз. Можно написать, например, такой код:

>OBJS = foo.о

>OBJS = $(OBJS) bar.о

>OBJS = $(OBJS) baz.о

Ожидается, что здесь >OBJS будет определен как >foo.о bar.о baz.о, но в действительности он определен как >$(OBJS) baz.о, поскольку >make не разворачивает переменные до момента их использования[4]. При ссылке в правиле на >OBJS make войдет в бесконечный цикл[5]. Во избежание этого во многих make-файлах разделы организуются следующим образом:

>OBJS1 = foo.о

>OBJS2 = bar.о

>OBJS3 = baz.о

>OBJS = $(OBJS1) $(OBJS2) $(OBJS3)

Объявления переменных вроде предыдущего встречаются, когда объявление одной переменной оказывается слишком длинным и потому не удобным.

Развертывание переменной вызывает типичный вопрос, который программист в Linux должен решить. Инструменты GNU, распространяемые с Linux, обычно более функциональны, чем версии инструментов, включенных в другие системы, и GNU


Рекомендуем почитать
Яйцо кукушки или Преследуя шпиона в компьютерном лабиринте

В отличие от плохого танцора, хорошему сисадмину мешают только кукушкины яйца. Их откладывают в его компьютер злобные хакеры, чтобы из них вылупились программы, делающие своего папу-кукушку суперпользователем. Но сколько кабелю не виться — а кончику быть: бравый сисадмин не дремлет и за годик-другой выводит злоумышленников на чистую воду: на этот раз хакерская тусовка круто пролетела. Такого предельно краткое содержание классической книги эксперта по компьютерной безопасности Клиффа Столла «Яйцо кукушки».



Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003

Книга предназначена для читателей, хорошо знакомых с компьютерными системами и индустрией информационных технологий и желающих расширить познания в области систем хранения данных и архитектуры Windows NT, непосредственно связанной с подобными системами. В книге описываются корпоративные системы хранения данных, в то время как системам потребительского уровня уделяется меньше внимания. В этом издании сделана попытка поддержать интересы специалистов по программному обеспечению, мало знакомых с технологиями хранения данных, и профессионалов в области систем хранения данных, которые стремятся получить дополнительные знания по архитектуре обработки и хранения данных в Windows NT.


Iptables Tutorial 1.1.19

Iptables Tutorial 1.1.19Автор: (C) Oskar AndreassonCopyright (C) 2001-2002 by Oskar AndreassonПеревод: (C) Андрей КиселевПоследнюю версию документа можно получить по адресу: http://iptables-tutorial.frozentux.netfb2-документ отформатирован с использованием большого количества тегов и . Чтобы в «читалке» (в частности, Haali Reader) текст выглядел «красиво», настройте свойства соотвествующих стилей (emphasis и strong), изменив, например, их цвета или начертания. (прим. автора fb2-документа)


Перспективы свободного программного обеспечения в сфере государственного управления и бюджетном секторе

n1`Глава 2 из отчета Фонда Новая экономика Министерству экономического развития и торговли по теме «Анализ результатов и разработка предложений по созданию механизмов поддержки (в том числе за счет средств федерального бюджета) проектов по использованию ИКТ в экономике, социальной сфере, государственном управлении на региональном и муниципальном уровнях власти». Работа выполнена в рамках ФЦП «Электронная Россия». Дается очерк перспектив модели коммерческого программного обеспечения, известной как свободное программное обеспечение (СПО), в части удовлетворения потребности государственных органов и организаций в компьютерных программах, в сравнении с альтернативной (несвободной) моделью.


64 килобайта о Фидо

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.