Остановить не заданные цели и не найденный make-файл

Обновлено: 03.07.2024

Я пытаюсь научиться создавать проект makefile в Xcode, используя встроенную документацию. (См. Перенос приложений UNIX/Linux в Mac OS X > Подготовка к переносу > Создание проектов Makefile с помощью Xcode). список "Особые цели", вы не используете последнюю версию Xcode. Сначала обновите ее."

Ну, я использую Xcode 2.5, технически не последнюю версию, но это последняя версия, которую я могу запустить в Tiger. Кроме того, эта документация поставлялась с версией Xcode, которую я использую, так почему же она предлагает мне обновиться?

Почему-то я подозреваю, что проблема не в версии Xcode, но документация на этом этапе становится бесполезной. Есть идеи?

MacBook Pro 17, Mac OS X (10.4.11), 4 ГБ ОЗУ, 160 ГБ HD

Опубликовано 20 марта 2008 г., 15:04

О, хорошо. Я скачал 8.3.1 и построил его с помощью Xcode. Вот что я сделал:

<р>1. После того, как я разархивировал исходный код, я посмотрел на главный каталог и заметил, что там уже есть Makefile. Итак, я посмотрел на него, и он говорит, что вам нужно сначала запустить скрипт configure, иначе он не будет использовать Makefile. Поэтому я запустил настройку.

<р>2. Я открыл Xcode и создал новую цель (используя «Внешнюю цель») и назвал ее «Сборка с помощью Make». Я удалил исходную цель и сделал новую цель активной целью сборки.

<р>3. Я дважды щелкнул цель «Сборка с помощью Make» и установил каталог в разделе «Пользовательская команда сборки» в мой загруженный каталог postgresql. В данном случае это было: /Users/username/Documents/Downloads/postgresql-8.3.1.

<р>4. Скажите Xcode собрать его, что он и сделал (это займет некоторое время).

Я не пытался импортировать весь исходный код в Xcode, но вам не нужно этого делать для его сборки, просто укажите make в нужном каталоге. Я мог бы поиграть с ним еще немного на этих выходных.

На самом деле существует целая куча make-файлов. Возможно, часть трюка заключается в том, чтобы выяснить, какой из них использовать.

Ну, он всегда будет просто основным. Затем основной будет использовать все остальные make-файлы по мере необходимости. Если вы не уверены в том, что делаете, вы, вероятно, не захотите возиться с тем, как основной Makefile настроен в проекте. Особенно такой сложный, как postgresql. Вы, вероятно, в конечном итоге будете ходить по кругу со всевозможными проблемами с зависимостями.

Опубликовано 21 марта 2008 г., 6:24

Полезные ответы

Дэвид Ливсей написал:
Я получаю сообщение "Цели не указаны и makefile не найден". В каталоге, который я добавил, определенно есть make-файл, поэтому я подумал, что использую неправильный шаблон.

Хм. Если я перейду к PDF-файлу Хосе Коэльо по ссылке в другом посте, все будет работать так, как он говорит. Преимуществом его PDF являются иллюстрации. С ними было намного проще понять, что я должен видеть. Поэтому, когда я его не видел, я знал, что есть что-то еще. В первый раз я запутался, какая цель была какой, поэтому продолжал искать то, чего там не было.

Как только я понял из его PDF-файла, что я делаю, я начал заново и сделал совершенно новый проект, как и он, вместо того, чтобы использовать старую программу, которую я компилировал из Терминала с Makefile.

Кроме того, глупый вопрос, но ваш Makefile называется "Makefile"? Я подозреваю, что это чувствительно к регистру, так как я когда-либо видел их только с заглавной буквы.

Если вы по-прежнему не можете заставить его работать, я попробую установить Xcode 2.4.1 на этих выходных и посмотрю, изменится ли это.

20 марта 2008 г., 21:33

Хорошо. Вот окончательный ответ.

Чтобы создать проект на основе Makefile с помощью Xcode 3
1) Создайте новый пустой проект.
2) Добавьте свои файлы в проект.
3) Добавьте в проект новую цель "Внешний".
4) Дважды щелкните внешнюю цель. Вы получите очень приятный диалог, в котором вы можете определить все настройки make, окружения и каталога. Я смог улучшить работу моего make-файла. Он строится как в конфигурациях Debug, так и в Release, а также работает Clean.

Таким образом, несмотря на то, что он очень плохо документирован, он представляет собой значительное улучшение по сравнению со старыми проектами на основе Makefile. На самом деле в документации Xcode 3.0 есть косвенная ссылка на использование «внешней» цели. Вам просто нужно очень внимательно следить за датой, связанной с любой документацией разработчика. Старые документы Xcode 2.3 от 2006 года по-прежнему включены в Xcode 3.0.

21 марта 2008 г., 13:26

Беседа не о чем

Загрузка содержимого страницы

Содержимое страницы загружено

Хм. У меня установлен Xcode 2.4.1, и я получаю возможность выбрать «Внешняя цель» при добавлении новой цели. В помощнике по созданию новой цели у меня есть четыре варианта «Особая цель»:

Агрегат
Цель копирования файлов
Внешняя цель
Цель сценария оболочки

Какое содержание:

/Library/Application Support/Apple/Инструменты разработчика/Target Templates/Special Targets/ в вашей системе? Я понимаю:

20 марта 2008 г., 18:33

Ожидается, что разработчики сами во всем разберутся. Следовательно, документация разработчика обычно устарела по сравнению с инструментами и приложениями. Фактическая документация по API поддерживается в актуальном состоянии, но это все.

Создайте пустой проект, добавьте свои файлы, затем добавьте цель сценария оболочки для запуска make. Я не знаю, можно ли подключить действия "сделать чистыми" или нет. Я не пробовал.

20 марта 2008 г., 18:51

Хе-хе. Я заставил его работать, более или менее, используя эти инструкции.

Я говорю "более или менее", потому что Xcode не запускает двоичный файл и не помещает его туда, где я ожидал. Я уверен, что это просто ошибка оператора, и он построил его так, как я хотел в Makefile.

20 марта 2008 г., 19:03

У меня есть те же варианты выбора в Target Assistant, но нет "GNU Make Target", который рекомендуется использовать в документации. Я пытался использовать «Внешнюю цель», но когда я пытаюсь собрать проект, я получаю «Цели не указаны и make-файл не найден». В каталоге, который я добавил, определенно есть make-файл, поэтому я подумал, что, должно быть, использую неправильный шаблон.

Как ни странно, у меня нет каталога "Целевые шаблоны", где он есть у вас. Просто

Шаблоны файлов
Плагины
Шаблоны проектов
Поддержка WebObjects

20 марта 2008 г., 19:58

Если "ожидается, что разработчики сами во всем разберутся", то зачем занимать место на диске устаревшей документацией? Кроме того, как можно стать разработчиком без документации? Я могу многое понять самостоятельно, но то, как работает конкретная программа, зависит от выбора, сделанного авторами этой программы, и они действительно обязаны точно документировать этот произвольный выбор перед своими пользователями.

Я не пытаюсь использовать цель сценария оболочки. Согласно документации, если вы используете правильный тип цели, вы можете использовать команды «запустить» и «очистить» в Xcode вместо вызова команд оболочки. Если бы я хотел сделать это, я бы просто запускал их из оболочки. Я пытаюсь научиться создавать проекты makefile с помощью Xcode.

20 марта 2008 г., 20:11

Мой до сих пор не работает. Это похоже на те же инструкции, что и в документации.

Мне пришло в голову, что если бы я собирал это из командной строки, я бы запустил configure перед make, но в этих инструкциях не упоминается configure.

20 марта 2008 г., 20:22

Дэвид Ливсей написал:
Я получаю сообщение "Цели не указаны и makefile не найден". В каталоге, который я добавил, определенно есть make-файл, поэтому я подумал, что использую неправильный шаблон.

Хм. Если я перейду к PDF-файлу Хосе Коэльо по ссылке в другом посте, все будет работать так, как он говорит. Преимуществом его PDF являются иллюстрации. С ними было намного проще понять, что я должен видеть. Поэтому, когда я его не видел, я знал, что есть что-то еще. В первый раз я запутался, какая цель была какой, поэтому продолжал искать то, чего там не было.

Как только я понял из его PDF-файла, что я делаю, я начал заново и сделал совершенно новый проект, как и он, вместо того, чтобы использовать старую программу, которую я компилировал из Терминала с Makefile.

Кроме того, глупый вопрос, но ваш Makefile называется "Makefile"? Я подозреваю, что это чувствительно к регистру, так как я когда-либо видел их только с заглавной буквы.

Если вы по-прежнему не можете заставить его работать, я попробую установить Xcode 2.4.1 на этих выходных и посмотрю, изменится ли это.

20 марта 2008 г., 21:33

Дэвид Ливсей писал:
Мне только что пришло в голову, что если бы я собирал это из командной строки, я бы запустил configure перед make, но в этих инструкциях не упоминается configure.

Это проект, который вы создали, или что-то, что вы скачали? Целью configure является создание Makefile. Поэтому, если вы загрузили исходный код, но никогда не запускали configure, у вас не было бы Makefile. Или, если он у вас есть, он может не работать в OS X.

20 марта 2008 г., 21:41

Это то, что я скачал. В частности, postgresql-8.3.0.

На самом деле существует целая куча make-файлов. Возможно, часть трюка заключается в том, чтобы выяснить, какой из них использовать.

21 марта 2008 г., 3:37

О, хорошо. Я скачал 8.3.1 и построил его с помощью Xcode. Вот что я сделал:

<р>1. После того, как я разархивировал исходный код, я посмотрел на главный каталог и заметил, что там уже есть Makefile. Итак, я посмотрел на него, и он говорит, что вам нужно сначала запустить скрипт configure, иначе он не будет использовать Makefile. Поэтому я запустил настройку.

<р>2. Я открыл Xcode и создал новую цель (используя «Внешнюю цель») и назвал ее «Сборка с помощью Make». Я удалил исходную цель и сделал новую цель активной целью сборки.

<р>3.Я дважды щелкнул цель «Сборка с помощью Make» и установил каталог в разделе «Пользовательская команда сборки» в мой загруженный каталог postgresql. В данном случае это было: /Users/username/Documents/Downloads/postgresql-8.3.1.

<р>4. Скажите Xcode собрать его, что он и сделал (это займет некоторое время).

Я не пытался импортировать весь исходный код в Xcode, но вам не нужно этого делать для его сборки, просто укажите make в нужном каталоге. Я мог бы поиграть с ним еще немного на этих выходных.

На самом деле существует целая куча make-файлов. Возможно, часть трюка заключается в том, чтобы выяснить, какой из них использовать.

Ну, он всегда будет просто основным. Затем основной будет использовать все остальные make-файлы по мере необходимости. Если вы не уверены в том, что делаете, вы, вероятно, не захотите возиться с тем, как основной Makefile настроен в проекте. Особенно такой сложный, как postgresql. Вы, вероятно, в конечном итоге будете ходить по кругу со всевозможными проблемами с зависимостями.

21 марта 2008 г., 6:24

Если это проект с открытым исходным кодом, нет особых причин использовать его в Xcode. Если вы выполняли какую-то значительную работу в проекте и хотите работать в Xcode, это было бы хорошей причиной. Если вы просто хотите создать и использовать его, вы можете просто настроить и сделать в Терминале. Даже если вы хотите что-то отладить, вы можете подключить отладчик Xcode к работающему процессу без необходимости его сборки.

Не поймите меня неправильно. «Просто потому, что я хочу построить его в Xcode» — вполне веская причина, но вам не нужен Xcode. Иногда люди думают, что на Mac необходимо использовать Xcode IDE.

21 марта 2008 г., 8:32

Дэвид Ливсей писал:
Если «ожидается, что разработчики сами во всем разберутся», то зачем занимать место на диске устаревшей документацией?

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

Кроме того, как можно стать разработчиком без документации? Я могу многое понять самостоятельно, но то, как работает конкретная программа, зависит от выбора, сделанного авторами этой программы, и они действительно обязаны точно документировать эти произвольные выборы перед своими пользователями.

Обучение разработке для конкретной платформы, не являющейся лидирующей на рынке, с использованием бесплатных инструментов требует серьезного обучения. Если бы вы работали на MS Windows, было бы доступно множество книг. Если бы вы работали с чем-то странным, например с VxWorks, ваша компания в течение пары недель прошла бы курс обучения работе с VxWorks в дополнение к обширной документации, которую предоставила бы ваша лицензия на несколько тысяч долларов за рабочее место.

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

Я не пытаюсь использовать цель сценария оболочки. Согласно документации, если вы используете правильный тип цели, вы можете использовать команды «запустить» и «очистить» в Xcode вместо вызова команд оболочки. Если бы я хотел сделать это, я бы просто запускал их из оболочки. Я пытаюсь научиться создавать проекты makefile с помощью Xcode.

У вас есть отличная идея. У меня есть несколько проектов в Xcode, которые являются веб-сайтами. У меня подключен make для создания сайта (используя XSLT), но не подключен clean, а хотелось бы. Я посмотрю на него прямо сейчас и посмотрю, смогу ли я его отследить.

Я не хочу, чтобы это обескураживало нового разработчика. Это часть увлечения использованием такой платформы, как MacOS X. Как только вы разберетесь в чем-то самостоятельно, вы можете стать одним из немногих людей в мире, которые знают, как что-то делать. «один из немногих людей в мире» может быть преувеличением, но не будет преувеличением сказать, что это «отсутствие документации» действительно уравнивает правила игры между небольшими разработчиками и крупными корпорациями на MacOS X. Например, в первой версии Mac Office 2008, разработчики Microsoft неправильно сделали свой установщик.Я мог бы честно сказать, что знаю, как делать вещи, до которых программисты транснациональных корпораций еще не додумались. Так что, если вы будете продолжать и не сдаваться, вы сможете преодолеть эту кривую обучения и быстро стать настоящим экспертом.

Независимо от того, работаете ли вы с Ubuntu, Debian или Red Hat, вы можете увидеть сообщение об ошибке make: *** Не указаны цели и не найден make-файл. Останавливаться. Поскольку это общая проблема, связанная с GNU Make в целом, вы можете встретить ее в бесчисленных реализациях Unix. Это означает, что в вашем текущем рабочем каталоге нет файла с именем makefile или Makefile. К счастью, эту ошибку легко исправить.

Метод 1: поиск Makefile в текущем каталоге

Вы можете попробовать запустить команду make еще раз в текущем каталоге, чтобы проверить, не возникнет ли у вас та же ошибка. Это особенно важно, если вы открыли новое окно терминала и уже пытались найти нужный каталог или если вы использовали команду cd с момента последней попытки запустить GNU make.

Предполагая, что это так, попробуйте запустить команду ls или dir, чтобы узнать, какие файлы находятся в вашем текущем каталоге. Возможно, вы находитесь не в той части дерева каталогов. Если вы заметили, что видите каталоги, принадлежащие вашему корневому каталогу / или вашему домашнему ~ каталогу, вам нужно запустить команду cd, чтобы оказаться в нужном месте для запуска команды make.

Возможно, вы окажетесь еще дальше от ожидаемого места. В нашем примере мы попытались запустить make из каталога /var/crash и обнаружили, что он вообще не работает. Нельзя ожидать, что он запустится отсюда, так как в этом конкретном месте находятся только файлы из несвязанных отчетов о сбоях.


Скорее всего, вы захотите запустить команду make из каталога, расположенного где-то внутри вашего домашнего каталога. Например, если вы собираете последнюю версию GNU nano из исходного кода, то у вас, вероятно, будет каталог, расположенный по адресу ~/nano-2.9.6, в который вы можете перейти, а затем снова запустить make. Возможно, вы захотите попробовать запустить ls еще раз, прежде чем пытаться сделать make, чтобы убедиться, что в каталоге есть make-файл, из которого вы можете выполнить сборку.

Имейте в виду, что сначала вам нужно настроить установку. Команда configure создает идеальную среду для процветания компилятора GNU. Если вы не нашли make-файл даже в правильном каталоге проекта, запустите ./configure, пока вы все еще находитесь внутри него, а затем выполните команду make. Если это скомпилируется правильно, вы можете установить свой проект с помощью sudo make install, но помните, что вы не хотите ничего собирать от имени root, поэтому вам никогда не захочется запускать sudo make или что-то еще вне установки.

Способ 2: указание пользовательского Makefile

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

Вы можете указать пользовательский make-файл, который называется не буквально makefile, используя параметр -f. Например, если у вас есть резервный make-файл с именем makefile.bak, вы можете указать его, запустив make -f makefile.bak из командной строки. Вы можете заменить makefile.bak любым именем файла, а также можете включить опцию -i, если хотите игнорировать ошибки в пользовательском или устаревшем make-файле во время работы компилятора. Обычно это не рекомендуется, так как вы, вероятно, захотите отредактировать свой make-файл, если с ним что-то не так.

Другой очень тесно связанный вариант использования включает ситуацию, когда чувствительность к регистру является проблемой. Ниже приведены все отдельные файлы в стиле Unix для ведения бизнеса:

  • Создать файл
  • создать файл
  • создать файл
  • Создать файл
  • Создать файл

Пользовательские программы могут не распознать make-файл с нечетным регистром заглавных букв. Если вы написали его от руки для проекта кодирования, над которым работаете, то вы, вероятно, захотите переименовать его в make-файл, хотя вы можете использовать параметр -i, чтобы гарантировать, что GNU make сможет его найти. Помните, что если вы все написали правильно, вы все равно можете запустить ./configure из своего собственного проекта, чтобы заставить его сгенерировать правильную среду и избежать этой проблемы, для начала.


Я слишком часто сталкиваюсь с этой ошибкой, и люди говорят мне, что это не ошибка, а файл. Ух. это правда?


make просто ищет в каталоге, в котором вы его запускаете, файл с именем Makefile, в котором есть только текстовые инструкции. Так что может быть просто этот файл отсутствует или он запускается не в том каталоге.

Многие программы создают Makefile после запуска ./configure или программы-оболочки.

создать, сделать, установить и собрать что-то вручную иногда очень сложно. Вот почему я обычно стараюсь придерживаться менеджера пакетов или найти файлы .deb, PPA, aur и т. д. (кто-то другой проделал тяжелую работу).

Если вы работаете в системе на основе Debian и вам необходимо скомпилировать/установить программное обеспечение из исходного кода, всегда создавайте .deb с помощью checkinstall . Это легко, просто замените make install на checkinstall, и все готово. Таким образом, ваш менеджер пакетов может позаботиться об установке/удалении пакета, а не потом мучиться с этим.

make — это программа командной строки, которая создает файлы из других файлов.

make работает над рядом правил, которые выглядят примерно так:

по умолчанию make ищет Makefile или makefile в каталоге, из которого вы его вызываете (и некоторые реализации ищут другие файлы, но это два больших файла).

Цель – это файл, который make пытается создать (filetomake слева от двоеточия выше).

О чем make говорит вам, так это о том, что в Makefile нет цели под названием "установить". (установка на самом деле не файл, который нужно создать, это просто то, что люди решили назвать для файла цели по соглашению, которое устанавливает вещи, так что всем не нужно выяснять, каким должно быть окончательное имя файла).

Make сравнивает файл для создания и файлы, из которых он создан, и, если файл для создания СТАРее (или просто не существует), он воссоздает его, выполняя команды. Если он новее, он говорит что-то вроде всех файлов в актуальном состоянии и ничего не делает. Правила могут каскадироваться, поэтому, если нужный вам файл не существует, но есть правило для его создания, make сначала запустит это правило и так далее.

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

Некоторые имена имеют особое значение, если они отображаются как цели.

Предпосылки специальной цели .PHONY считаются фальшивыми целями. Когда придет время подумать о такой цели, make безоговорочно запустит свой рецепт, независимо от того, существует ли файл с таким именем или каково время его последней модификации. См. Фальшивые цели.

Необходимым условием специальной цели .SUFFIXES является список суффиксов, которые будут использоваться при проверке правил для суффиксов. См. устаревшие правила использования суффиксов.

Рецепт, указанный для .DEFAULT, используется для любой цели, для которой не найдены правила (явные или неявные правила). См. «Последнее средство». Если указан рецепт .DEFAULT, каждый файл, указанный в правиле как обязательный, но не целевой, будет выполнять этот рецепт от своего имени. См. Алгоритм поиска по неявному правилу.

Цели, от которых зависит .PRECIOUS, обрабатываются следующим образом: если make уничтожается или прерывается во время выполнения их рецептов, цель не удаляется. См. Прерывание или уничтожение make . Кроме того, если целью является промежуточный файл, он не будет удален после того, как станет не нужен, как это обычно делается. См. Цепочки неявных правил. В этом последнем отношении он пересекается со специальной целью .SECONDARY.

Вы также можете указать целевой шаблон неявного правила (например, ' %.o ') в качестве предварительного файла специальной цели .PRECIOUS, чтобы сохранить промежуточные файлы, созданные правилами, целевые шаблоны которых соответствуют имени этого файла.

Цели, от которых зависит .INTERMEDIATE, рассматриваются как промежуточные файлы. См. Цепочки неявных правил. .INTERMEDIATE без предварительных условий не действует.

Цели, от которых зависит .SECONDARY, рассматриваются как промежуточные файлы, за исключением того, что они никогда не удаляются автоматически. См. Цепочки неявных правил.

.SECONDARY без предварительных требований приводит к тому, что все цели рассматриваются как вторичные (т. е. ни одна цель не удаляется, поскольку она считается промежуточной).

Если .SECONDEXPANSION упоминается как цель где-либо в make-файле, то все списки обязательных требований, определенные после его появления, будут расширены во второй раз после того, как все make-файлы будут прочитаны. См. Вторичное расширение.< /p>

Если .DELETE_ON_ERROR упоминается как цель где-либо в make-файле, то make удалит цель правила, если оно было изменено, и его рецепт завершается с ненулевым статусом выхода, как это происходит при получении сигнала. См. Ошибки в рецептах.

Если вы укажете предварительные условия для .IGNORE , make будет игнорировать ошибки при выполнении рецепта для этих конкретных файлов. Рецепт для .IGNORE (если есть) игнорируется.

Если указано как цель без предварительных требований, .IGNORE говорит игнорировать ошибки при выполнении рецептов для всех файлов. Такое использование «.IGNORE» поддерживается только для исторической совместимости. Поскольку это влияет на каждый рецепт в make-файле, это не очень полезно; мы рекомендуем использовать более избирательные способы игнорирования ошибок в определенных рецептах. См. Ошибки в рецептах.

Если вы указываете предварительные условия для .LOW_RESOLUTION_TIME , make предполагает, что эти файлы созданы командами, которые генерируют метки времени с низким разрешением. Рецепт для цели .LOW_RESOLUTION_TIME игнорируется.

Временные метки файлов с высоким разрешением во многих современных файловых системах уменьшают вероятность ошибочного вывода о том, что файл актуален. К сожалению, некоторые хосты не предоставляют возможности установки метки времени файла с высоким разрешением, поэтому такие команды, как ‘ cp -p ’, которые явно устанавливают метку времени файла, должны отбрасывать его часть, меньшую секунды. Если файл создается такой командой, вы должны указать его как предварительное условие .LOW_RESOLUTION_TIME, чтобы make не сделал ошибочного вывода, что файл устарел. Например:

Поскольку ‘ cp -p ’ отбрасывает долю секунды в отметке времени src, dst обычно немного старше, чем src, даже если он обновлен. Строка .LOW_RESOLUTION_TIME заставляет make считать dst актуальным, если его отметка времени находится в начале той же секунды, что и отметка времени src.

Из-за ограничений формата архива временные метки элементов архива всегда имеют низкое разрешение. Вам не нужно перечислять членов архива в качестве предварительных условий .LOW_RESOLUTION_TIME , так как make делает это автоматически.

Если вы укажете предварительные условия для .SILENT , то make не будет печатать рецепт, используемый для переделки этих конкретных файлов перед их выполнением. Рецепт для .SILENT игнорируется.

Если упоминается как цель без предварительных условий, .SILENT говорит не печатать какие-либо рецепты перед их выполнением. Вы также можете использовать более избирательные способы для отключения определенных командных строк рецепта. См. Повторение рецепта. Если вы хотите отключить все рецепты для определенного запуска make , используйте опцию ‘-s’ или ‘-silent’ (см. Обзор опций).

Простое упоминание в качестве цели указывает make по умолчанию экспортировать все переменные в дочерние процессы. См. раздел «Передача переменных в составную часть».

Если в качестве цели указан .NOTPARALLEL, то этот вызов make будет выполняться последовательно, даже если задана опция ‘-j’. Любая рекурсивно вызванная команда make по-прежнему будет запускать рецепты параллельно (если ее make-файл также не содержит эту цель). Любые предварительные условия для этой цели игнорируются.

Если в качестве цели указан .ONESHELL, то при построении цели все строки рецепта будут переданы одному вызову оболочки, а не каждая строка вызывается отдельно (см. Выполнение рецепта).

Если в качестве цели указан .POSIX, make-файл будет проанализирован и запущен в режиме, соответствующем POSIX. Это не означает, что будут приниматься только make-файлы, соответствующие POSIX: все расширенные функции GNU make по-прежнему доступны. Скорее, эта цель заставляет make работать в соответствии с требованиями POSIX в тех областях, где поведение make по умолчанию отличается.

В частности, если указана эта цель, рецепты будут вызываться, как если бы оболочке был передан флаг -e: первая неудачная команда в рецепте вызовет немедленный сбой рецепта.

Любой определенный суффикс неявного правила также считается специальной целью, если он отображается как цель, а также конкатенация двух суффиксов, например ‘.c.o’. Этими целями являются суффиксные правила, устаревший способ определения неявных правил (но все еще широко используемый). В принципе, любое целевое имя может быть таким особенным, если разбить его на две части и добавить обе части в список суффиксов. На практике суффиксы обычно начинаются с «. ’, поэтому эти специальные имена целей также начинаются с ‘ . ’. См. устаревшие правила использования суффиксов.

Читайте также: