~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7CDAC778E5B24D2BAC3CF711308F4127__1718805780 ✰
Заголовок документа оригинал.:
✰ Make (software) - Wikipedia ✰
Заголовок документа перевод.:
✰ Марка (программное обеспечение) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/GNU_make ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/7c/27/7cdac778e5b24d2bac3cf711308f4127.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/7c/27/7cdac778e5b24d2bac3cf711308f4127__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 11:35:07 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 June 2024, at 17:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Марка (программное обеспечение) — Википедия Jump to content

Сделать (программное обеспечение)

Из Википедии, бесплатной энциклопедии
(Перенаправлено с GNU make )
Делать
Парадигма макро , декларативный
Разработано Стюарт Фельдман
Впервые появился апрель 1976 г .; 48 лет назад ( 1976-04 )
Язык реализации С
ТЫ Unix-подобный , Inferno
Форматы файлов Makefile
Основные реализации
BSD, GNU, нмейкер
Диалекты
BSD make, GNU make, Microsoft nmake
Под влиянием
Ant , Rake , MSBuild и другие.

В разработке программного обеспечения Make это с интерфейсом командной строки (CLI) программный инструмент , который выполняет действия, упорядоченные настроенными зависимостями , как определено в файле конфигурации , называемом makefile . Он обычно используется для автоматизации сборки для создания исполняемого кода (например, программы или библиотеки ) из исходного кода . Но, не ограничиваясь сборкой, Make может выполнять любые операции, доступные через оболочку операционной системы .

Make широко используется, особенно в Unix и Unix-подобных операционных системах , хотя доступно множество конкурирующих технологий и инструментов, включая: аналогичные инструменты, которые выполняют действия на основе зависимостей, некоторых компиляторов и в интерактивном режиме через интегрированную среду разработки (IDE).

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

Происхождение [ править ]

Стюарт Фельдман создал Make в Bell Labs . Ранняя версия была завершена в апреле 1976 года. [1] [2] [3] Фельдман получил в 2003 году премию ACM Software System Award за разработку Make. [4]

Фельдман описывает, как вдохновение для написания Make пришло от разочарования коллеги в доступных инструментах того времени:

Make возник в результате визита Стива Джонсона (автора yacc и т. д.), который ворвался в мой офис, проклиная Судьбу, заставившую его потратить утро на отладку правильной программы (ошибка была исправлена, файл не был скомпилирован, cc *.oпоэтому не пострадал). Поскольку часть предыдущего вечера я провел, пытаясь справиться с той же катастрофой в проекте, над которым работал, возникла идея инструмента для ее решения. Все началось с тщательно продуманной идеи анализатора зависимостей, свелось к чему-то гораздо более простому и в те выходные превратилось в Make. Использование еще влажных инструментов было частью культуры. Makefiles были текстовыми файлами, а не магически закодированными двоичными файлами, потому что это был дух Unix : пригодные для печати, отлаживаемые и понятные вещи.

До появления Make разработка Unix в основном состояла из сценариев оболочки , написанных для кодовой базы каждой программы. Упорядочение зависимостей и проверка устаревших данных в Make делают процесс сборки более надежным и эффективным. Makefile позволил лучше организовать логику сборки и зачастую уменьшить количество файлов сборки.

Make широко используется отчасти благодаря его раннему включению в Unix , начиная с PWB/UNIX 1.0, в котором представлено множество инструментов разработки программного обеспечения. [3]

Варианты [ править ]

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

  • Sun DevPro Make появилась в 1986 году с SunOS-3.2. С SunOS-3.2. Он поставлялся как дополнительная программа; в SunOS-4.0 SunPro Make стала программой Make по умолчанию. [5] [ нужен лучший источник ] В декабре 2006 года Sun DevPro Make стал открытым исходным кодом в рамках усилий по открытию исходного кода Solaris . [6] [7]
  • dmake или Distributed Make, который поставляется с Sun Solaris Studio в качестве Make по умолчанию, но не является Make по умолчанию в операционной системе Solaris (SunOS). Первоначально он требовался для сборки OpenOffice, но в 2009 г. [8] система сборки была переписана для использования GNU Make. Хотя Apache OpenOffice по-прежнему содержит смесь обеих систем сборки, [9] гораздо более активно развиваемый LibreOffice теперь использует только модернизированный «gbuild». [8]
  • Сделать BSD ( pmake , [10] сделать [11] или сделать [12] ), который заимствован из работы Адама де Бура над версией Make, способной параллельно создавать цели , и сохраняется с различной степенью модификации во FreeBSD , [11] NetBSD [13] и OpenBSD . [14] В частности, он имеет условные выражения и итеративные циклы, которые применяются на этапе синтаксического анализа и могут использоваться для условного и программного создания make-файла. [15] включая генерацию целей во время выполнения. [ нужна цитата ]
  • GNU Make (сокращенно gmake ) — это стандартная реализация Make для Linux и macOS. [16] Он предоставляет несколько расширений по сравнению с исходным Make, например, условные выражения. Он также предоставляет множество встроенных функций, которые можно использовать для устранения необходимости использования сценариев оболочки в правилах make-файла, а также для управления переменными, установленными и используемыми в make-файле. [17] Например, функцию foreach можно использовать для перебора списка значений, например имен файлов в заданном каталоге. [18] GNU Make необходим для создания многих программных систем, включая GNU Compiler Collection (GCC) (начиная с версии 3.4). [19] ), ядро ​​Linux, [20] [21] Апач ОпенОфис, [9] ЛибреОфис, [8] и Мозилла Фаерфокс . [22]
  • Ремейк Рокки Бернштейна [23] является ответвлением GNU Make и предоставляет несколько расширений для GNU Make, таких как улучшенные отчеты о местоположении и обнаружении ошибок, отслеживание выполнения, профилирование выполнения, а также содержит отладчик.
  • Гленна Фаулера Марка [24] (не связанный с одноименным вариантом Microsoft) несовместим с вариантом UNIX, но предоставляет функции, которые, по некоторым данным, уменьшают размер make-файлов в 10 раз.
  • Microsoft nmake обычно устанавливается вместе с Visual Studio . [25] Он поддерживает директивы препроцессора, такие как включения и условные выражения, которые используют переменные, установленные в командной строке или в файлах makefile. [26] [27] Правила вывода отличаются от правил Make; например, они могут включать пути поиска. [28]
  • Embarcadero make имеет параметр командной строки, который «заставляет MAKE имитировать Microsoft NMAKE». [29]
  • Project Qt Инструмент Jom является клоном nmake. [30]
  • Мк заменил Make в Research Unix , начиная с 9 версии. [31] Это модернизированная версия оригинального инструмента, разработанная программистом Bell Labs Эндрю Дж. Хьюмом, с другим синтаксисом. Mk стал стандартным инструментом сборки в Plan 9 , предполагаемом преемнике Unix, разработанном Bell Labs. [32]
  • Kati — это замена GNU Make от Google, которая с 2020 года используется в ОС Android сборках . Он переводит make-файл в ninja для более быстрой инкрементальной сборки (аналогично метаинструменту cmake). [33]
  • Snakemake — это реализация на основе Python для компиляции и запуска рабочих процессов биоинформатики . [34]

POSIX включает стандартизацию основных функций и работы утилиты Make и реализован с различной степенью совместимости с версиями Make на базе Unix. В общем, простые make-файлы можно с достаточным успехом использовать между различными версиями Make. GNU Make, Makepp и некоторые версии BSD Make по умолчанию сначала ищут файлы с именем «GNUmakefile», [35] "Макеппфайл" [36] и «BSDmakefile» [37] соответственно, что позволяет размещать make-файлы, использующие поведение, определяемое реализацией, в разных местах.

Используйте [ править ]

Как правило, на основе make-файла Make обновляет целевые файлы из исходных файлов, если какой-либо исходный файл имеет более новую временную метку , чем целевой файл, или целевой файл не существует. Например, это может включать в себя компиляцию файлов C ( *.c) в объектные файлы , затем связывая объектные файлы в исполняемую программу. Или это может включать в себя компиляцию TypeScript ( файлов *.ts) в JavaScript для использования в браузере. Другие примеры включают: преобразование исходного файла изображения в другой формат, копирование файла в систему управления контентом и отправка электронного письма о состоянии сборки.

Makefile определяет цели, каждый из которых является либо файлом для создания, либо определяемой пользователем концепцией, называемой фальшивой целью.

Обновите цели, переданные в качестве аргументов:

make   [  -f   makefile  ]   [  опции  ]   [  цели  ] 

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

Make пропускает действия сборки, если временная метка целевого файла позже временной метки исходных файлов. [38] Это оптимизирует процесс сборки, пропуская действия, когда целевой файл обновлен, но иногда обновления пропускаются ошибочно из-за проблем с временной меткой файла, включая восстановление более старой версии исходного файла или когда сетевая файловая система является источником файлы, а его часы или часовой пояс не синхронизированы с компьютером, на котором работает Make. Кроме того, если временная метка исходного файла находится в будущем, make неоднократно запускает ненужные действия, что приводит к увеличению времени сборки.

Когда Make запускается, он использует make-файл, указанный в командной строке, а если он не указан, то затем использует файл, найденный с помощью определенных правил поиска. Обычно Make по умолчанию использует файл в рабочем каталоге с именем Makefile . GNU Make ищет первый соответствующий файл: GNUmakefile , make-файл или Makefile .

Make обрабатывает параметры командной строки на основе загруженного make-файла.

Makefile [ править ]

Makefile
Единый идентификатор типа (UTI) public.make-источник [39]

Язык makefile — это частично декларативное программирование , в котором конечные условия описаны, но порядок выполнения действий не описан. [40] [41] [42] [43] Этот тип программирования может сбить с толку программистов, привыкших к императивному программированию .

Makefiles могут содержать следующие конструкции: [44]

  • Явное правило : определяет, когда и как обновлять цель; список предварительных условий (зависимых целей) и команд, определяющих действие обновления, называемое рецептом
  • Неявное правило : определяет, когда и как переделать класс файлов на основе их имен; включая то, как цель зависит от файла с именем, похожим на цель, и рецептом обновления
  • Определение переменной : связывает текстовое значение с именем, которое можно заменить в более позднем тексте.
  • Директива : инструкция сделать что-то особенное, например включить другой make-файл.
  • Комментарий : строка, начинающаяся с #

Правила [ править ]

Каждое правило начинается со строки зависимости имени правила, , которая состоит из целевого за которым следует двоеточие (:) и, при необходимости, список целей, от которых зависит цель правила, а также его предварительные условия. [45]

цель [цель ...]: [компонент ...]
 Tab ↹[команда 1]
	    .
	    .
	    .
 Tab ↹[команда н]
 

Обычно правило имеет одну цель, а не несколько.

За строкой зависимости может следовать рецепт; серия командных строк с отступом TAB , которые определяют, как сгенерировать цель из компонентов (т.е. исходных файлов). Если какое-либо предварительное условие имеет более позднюю временную метку, чем целевой файл, или целевой файл не существует в виде файла, рецепт выполняется.

Первая команда может появиться в той же строке после предварительных условий, разделенных точкой с запятой.

цели  :   предпосылки  ;   команда 

например,

привет  :   ;   @  эхо  "  привет  " 
 

Каждая командная строка должна начинаться с символа табуляции. Несмотря на то, что пробел также является пробелом , для Make требуется табуляция. Поскольку это часто приводит к путанице и ошибкам, этот аспект синтаксиса make-файла подвергается критике; описан Эриком С. Рэймондом как «одна из худших ошибок проектирования в истории Unix». [46] и в «Справочнике Unix-Haters Handbook» говорится, что «использование табуляции как части синтаксиса похоже на одну из тех ловушек из палочек в «Зеленых беретах ». Фельдман объясняет свой выбор решением проблемы ранней реализации, сохраняющейся стремлением к обратной совместимости с самыми первыми пользователями:

Почему вкладка в столбце 1? Якк был новым, Лекс был совершенно новым. Я тоже не пробовал, поэтому решил, что это будет хороший повод поучиться. После того, как я запутался во время своего первого удара по Лексу, я просто сделал что-то простое с шаблоном новой строки-вкладки. Это сработало, оно осталось. А через несколько недель у меня было около дюжины пользователей, большинство из которых были друзьями, и я не хотел испортить свою встроенную базу. Остальное, к сожалению, уже история.

Стюарт Фельдман [46]

GNU Сделать. начиная с версии 3.82 позволяет выбирать любой символ (один символ) в качестве префикса рецепта с помощью специальной переменной .RECIPEPREFIX, например:

.РЕЦИПЕПРЕФИКС   :=   : 
  all  : 
 :@echo   "символ префикса рецепта установлен на '$(.RECIPEPREFIX)'" 

Каждая команда выполняется в отдельной оболочке . Поскольку операционные системы используют разные оболочки, это может привести к созданию непереносимых make-файлов. Например, GNU Make (все версии POSIX) выполняет команды с /bin/sh по умолчанию Unix, команды такие как cp , тогда как обычно используются от Microsoft . В отличие от этого, nmake выполняет команды с помощью cmd.exe, где пакетные команды, такие как копирование доступны , но не обязательно cp.

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

Realclean  :   очистить   дистчистку 

Следующий пример правила оценивается, когда Сделать обновление целевого файла.txt; то есть через make file.txt. Если файл file.html новее файла file.txt или файл file.txt не существует, то запускается команда для создания файла file.txt из файла file.html.

файл.txt  :   файл  .   html 
	 lynx   -dump   файл.html   >   файл.txt 
 

Команда может иметь один или несколько следующих префиксов (после табуляции):

  • минус (-) указывает на игнорирование ошибки команды
  • at (@) указывает, что не выводится до ее выполнения. команда
  • плюс (+) указывает на выполнение команды, даже если Make вызывается в режиме «не выполнять»

Игнорирование ошибок и подавление эха также можно получить с помощью специальных целей. .IGNORE и .SILENT. [47]

Microsoft NMAKE имеет предопределенные правила, которые можно исключить из этих make-файлов, например c.obj $(CC)$(CFLAGS).

Макросы [ править ]

Makefile может определять и использовать макросы. Макросы обычно называются переменными, если они содержат простые определения строк, например CC=clang. Макросы в make-файлах могут быть переопределены в аргументах командной строки, передаваемых утилите Make. Переменные среды также доступны в виде макросов.

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

Макросы обычно пишутся заглавными буквами :

МАКРО   =   определение
 

Значение макроса может состоять из других значений макроса. Значение макроса увеличивается при каждом использовании ( лениво ).

Макрос используется путем расширения либо через $ NAME , либо через $( NAME ). Последнее безопаснее, так как пропуск скобок приводит к интерпретации следующей буквы после $как полное имя переменной. В эквивалентной форме вместо круглых скобок используются фигурные скобки, т.е. ${}, стиль, используемый в BSD .

NEW_MACRO   =   $(  МАКРОС  )  -  $(  МАКРОС2  ) 

Макросы могут состоять из команд оболочки с помощью оператора подстановки команд , обозначаемого обратными кавычками ( `).

ГГГГММДД    =   `   дата`  

Синтаксис командной строки для переопределения макроса:

make   МАКРОС  =  «значение»   [  МАКРО  =  «значение»   ...  ]   ЦЕЛЬ   [  ЦЕЛЬ   ...  ] 

Makefiles могут получить доступ к предопределённым внутренним макросам , с помощью ? и @ будучи общим.

цель  :   компонент  1,  компонент  2 
    # компоненты echo МОЛОЖЕ, чем TARGET 
	 echo   $?  
  # echo Имя ЦЕЛИ 
	 echo   $@ 

Общим синтаксисом при определении макросов, который работает в BSD и GNU Make, является использование += , ?= и != вместо знака равенства ( = ). [48]

Правила суффиксов [ править ]

Правила суффиксов имеют «цели» с именами в форме .FROM.TOи используются для запуска действий на основе расширения файла. В командных строках правил суффиксов POSIX указывает [49] что внутренний макрос $< относится к первой предпосылке и $@относится к цели. В этом примере, который преобразует любой HTML-файл в текст, токен перенаправления оболочки > является частью командной строки, тогда как $< это макрос, ссылающийся на HTML-файл:

.СУФФИКСЫ  :   .   текст  .   html 

 # Из .html в .txt 
 .html.txt  : 
	 lynx   -dump   $<     >     $@ 

При вызове из командной строки приведенный выше пример расширяется.

$  make   -n   файл.txt 
  lynx -dump файл.html > файл.txt 

Правила шаблона [ править ]

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

Правило шаблона выглядит как обычное правило, за исключением того, что его цель содержит ровно одно правило. %символ внутри строки. Целью считается шаблон для сопоставления имен файлов: % может соответствовать любой подстроке из нуля или более символов, [52] в то время как другие персонажи соответствуют только самим себе. Предпосылки также используют % чтобы показать, как их имена связаны с целевым именем.

Приведенный выше пример правила суффикса будет выглядеть как следующее правило шаблона:

# Из %.html в %.txt 
 %.txt  :   %.   html  
	 lynx   -dump   $<   >   $@ 

Комментарий [ править ]

Однострочные комментарии начинаются с символа решетки (#).

Директива [ править ]

Директива определяет особое поведение, например включение другого make-файла.

Продолжение строки [ править ]

Продолжение строки обозначается обратной косой чертой. \ символ в конце строки.

цель: компонент \
            компонент
    Tab ↹команда;  \
    Tab ↹команда |  \
    Tab ↹конвейерная команда
 

Примеры [ править ]

Следующие команды относятся к следующему make-файлу.

сделать              # обновлений первой целью, «все» 
  make   help         # обновляет target 'help' для отображения списка целей 
  make   dist         # обновляет цель 'dist' для сборки для распространения 
ПАКЕТ 	  =   пакет 
  VERSION 	  =   `   дата   "+%Y.%m%d%"   ` 
 RELEASE_DIR    =   .. 
  RELEASE_FILE   =   $(  PACKAGE  )  -  $(  VERSION  ) 

 # Цель по умолчанию 
 # примечание: переменная LOGNAME поступает из среды 
 all  : 
	 echo   "Привет  $(  LOGNAME  )  , по умолчанию делать нечего" 
	 echo   "Попробуйте 'сделать помощь'" 

 # Отобразить цели при поиске в этом файле 
 справка  : 
	 egrep   "^# target:"   [  Mm  ]  akefile 

  # Создайте 
 дистрибутив  выпуска : 
	 tar   -cf    $(  RELEASE_DIR  )  /  $(  RELEASE_FILE  )   &&   \ 
	 gzip   -9    $(  RELEASE_DIR  )  /  $(  RELEASE_FILE  )  .tar 
 

Ниже приведен простой make-файл, который по умолчанию (правило «все» указано первым) компилирует исходный файл с именем «helloworld.c» с использованием системного компилятора C, а также предоставляет «чистую» цель для удаления сгенерированных файлов, если пользователь пожелает. начать все сначала. $@ и $<являются двумя так называемыми внутренними макросами (также известными как автоматические переменные) и обозначают имя цели и «неявный» источник соответственно. В примере ниже $^расширяется до списка предварительных условий, разделенного пробелами. Есть ряд других внутренних макросов. [49] [53]

CFLAGS   ?=   -g 

  все  :   helloworld 

 helloworld  :   helloworld  .   o 
	 $(  CC  )   $(  LDFLAGS  )   -o   $@   $^ 

  helloworld.o  :   приветмир  .   c 
	 $(  CC  )   $(  CFLAGS  )   -c   -o   $@   $< 

  очистить  : 
	 $(  RM  )   helloworld   helloworld.o 
 

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

все  :   helloworld 

 helloworld  :   helloworld  .   o 
	 $(  CC  )   $(  CFLAGS  )   $(  LDFLAGS  )   -o   $@   $^ 

  очистить  : 
	 $(  RM  )   helloworld   helloworld.o 

  # правило суффикса 
 .co  : 
	 $(  CC  )   $(  CFLAGS  )   -c   $< 

  .СУФФИКСЫ  :   .   с 


То, что «helloworld.o» зависит от «helloworld.c», теперь автоматически обрабатывается Make. В таком простом примере, как показанный здесь, это вряд ли имеет значение, но реальная сила правил суффиксов становится очевидной, когда количество исходных файлов в программном проекте начинает расти. Достаточно лишь написать правило для этапа компоновки и объявить объектные файлы обязательными. Затем Make неявно определяет, как создавать все объектные файлы, и ищет изменения во всех исходных файлах.

Простые правила суффиксов работают хорошо, пока исходные файлы не зависят друг от друга и от других файлов, таких как файлы заголовков. Другой способ упростить процесс сборки — использовать так называемые правила сопоставления с образцом, которые можно комбинировать с генерацией зависимостей с помощью компилятора. В качестве последнего примера, требующего компилятора gcc и GNU Make, вот общий make-файл, который компилирует все файлы C в папке в соответствующие объектные файлы, а затем связывает их с окончательным исполняемым файлом. Перед компиляцией зависимости собираются в формате, удобном для make-файла, в скрытый файл «.dependent», который затем включается в make-файл. Портативные программы должны избегать конструкций, используемых ниже.

# Общий GNUMakefile 

 # фрагмент кода выдаст ошибку, если он не GNU 
 ifneq (,) 
 Для этого   make-файла   требуется   GNU   Make. 
  endif 

 ПРОГРАММА   =   foo 
  C_FILES   :=   $(  подстановочный знак   *.c  ) 
 OBJS   :=   $(  patsubst   %.c,   %.o,   $(  C_FILES  )) 
 CC   =   cc 
  CFLAGS   =   -Стена   -педантичный 
  LDFLAGS   = 
 LDLIBS   =   -lm 

  все  :   $(  ПРОГРАММА  ) 

 $(ПРОГРАММА)  :   .   зависят   $(  OBJS  ) 
	 $(  CC  )   $(  CFLAGS  )   $(  OBJS  )   $(  LDFLAGS  )   -o   $(  PROGRAM  )   $(  LDLIBS  ) 

 зависят  :   .   зависимость 

 .зависимость  :   cmd  =  gcc  -  MM  -  MF   зависимость   $(  var  )  ;   кот   зависит  >> .   зависеть  ; 
  .dependent  : 
	 @echo   "Генерация зависимостей..." 
	 @  $(  foreach   var,   $(  C_FILES  )  ,   $(  cmd  )) 
	 @rm   -f   depend 

  -include .dependent 

 # Это правила сопоставления с образцом.   В дополнение к используемым здесь автоматическим 
 переменная $*, которая соответствует символу %, обозначающему 
 # переменным, в особых случаях может быть полезна 
 #.  %.о  :   %.   c 
	 $(  CC  )   $(  CFLAGS  )   -c   $<   -o   $@ 

 %  :   %.   o 
	 $(  CC  )   $(  CFLAGS  )   -o   $@   $< 

  очистить  : 
	 rm   -f   .dependent   $(  OBJS  ) 

 .PHONY  :   очистить   зависимость 

Отслеживание зависимостей [ править ]

Makefile состоит из зависимостей, а забытый или дополнительный файл может быть не сразу очевиден для пользователя и может привести к тонким ошибкам в сгенерированном программном обеспечении, которые трудно обнаружить. Чтобы избежать этой проблемы и синхронизировать зависимости в исходном коде и make-файлах, можно использовать различные подходы. Один из подходов заключается в использовании компилятора для отслеживания изменений зависимостей. Например, GCC может статически анализировать исходный код и автоматически создавать правила для данного файла, используя -MMвыключатель. Другой подход — это make-файлы или сторонние инструменты, которые будут генерировать make-файлы с зависимостями (например, набор инструментов Automake от GNU Project может делать это автоматически).

Другой подход — использовать инструменты мета-сборки, такие как CMake , Meson и т. д.

См. также [ править ]

Ссылки [ править ]

  1. ^ "V7/usr/src/cmd/make/ident.c" . tuhs.org . 1 сентября 2013 г. Архивировано из оригинала 1 сентября 2013 г. Проверено 18 марта 2018 г.
  2. ^ Фельдман, С.И. (апрель 1979 г.). «Создать --- программу для поддержки компьютерных программ». Программное обеспечение: практика и опыт . 9 (4): 255–265. CiteSeerX   10.1.1.39.7058 . дои : 10.1002/спе.4380090402 . S2CID   33059412 .
  3. ^ Перейти обратно: а б Томпсон, Ти Джей (ноябрь 1980 г.). «Верстак дизайнера: обеспечение производственной среды». Технический журнал Bell System . 59 (9): 1811–1825. дои : 10.1002/j.1538-7305.1980.tb03063.x . S2CID   27213583 . При общем обслуживании DWB мы использовали систему контроля исходного кода и утилиту make, предоставляемую интерактивной операционной системой PWB/UNIX*.
  4. ^ Мэтью Доар (2005). Практическая среда разработки . О'Рейли Медиа . п. 94. ИСБН  978-0-596-00796-6 .
  5. ^ «Группы Google» . arquivo.pt . Архивировано из оригинала 22 января 2011 года . Проверено 18 марта 2018 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  6. ^ «OpenSolaris в два (Джим Гризанцио)» . 12 декабря 2013 года. Архивировано из оригинала 12 декабря 2013 года . Проверено 18 марта 2018 г.
  7. ^ Гризанцио, Джим. История OpenSolaris .
  8. ^ Перейти обратно: а б с «Разработка/Gbuild — The Document Foundation Wiki» . wiki.documentfoundation.org . Проверено 18 марта 2018 г.
  9. ^ Перейти обратно: а б «Руководство по созданию Apache OpenOffice — Apache OpenOffice Wiki» . wiki.openoffice.org . Проверено 18 марта 2018 г.
  10. ^ Исходный код FreeBSD 2.0.5 Make , 1993 г.
  11. ^ Перейти обратно: а б «Бсделать(1)» .
  12. ^ «fmake(1) Руководство по основным командам» .
  13. ^ "делать" . Страницы руководства NetBSD . Проверено 9 июля 2020 г.
  14. ^ «make(1) — страницы руководства OpenBSD» . man.openbsd.org . Проверено 18 марта 2018 г.
  15. ^ "делать" . FreeBSD . Проверено 9 июля 2020 г. В make предусмотрены включение Makefile, условные структуры и циклы for, напоминающие язык программирования C.
  16. ^ Арнольд Роббинс (2005), Unix в двух словах, четвертое издание , О'Рейли
  17. ^ «8. Функции преобразования текста» , GNU make , Free Software Foundation, 2013 г.
  18. ^ «8.5 Функция foreach» , GNU make , Фонд свободного программного обеспечения, 2013 г.
  19. ^ «Изменения, новые функции и исправления серии выпусков GCC 3.4» . Фонд свободного программного обеспечения. 2006.
  20. ^ Хавьер Мартинес Канильяс (26 декабря 2012 г.). «Kbuild: система сборки ядра Linux» . Linux-журнал .
  21. ^ Грег Кроа-Хартман (2006), Ядро Linux в двух словах , О'Рейли
  22. ^ «Инструкция по сборке» .
  23. ^ Рокки Бернштейн. «Remake – GNU Make с понятной трассировкой и отладчиком» .
  24. ^ Гленн Фаулер (4 января 2012 г.). «Обзор nmake» . Исследования информационных и программных систем, исследования лабораторий AT&T. Архивировано из оригинала 2 сентября 2015 года . Проверено 26 мая 2014 г.
  25. ^ «Справочник NMAKE по Visual Studio 2015» . Майкрософт. 2015.
  26. ^ «Директивы предварительной обработки Makefile» . 2014.
  27. ^ «Операторы предварительной обработки Makefile» . Майкрософт. 2014.
  28. ^ «Пути поиска в правилах» . Майкрософт. 2014.
  29. ^ "ДЕЛАТЬ" . КодГир(ТМ). 2008.
  30. ^ «Джом — Qt Wiki» . Проект Qt. 2021.
  31. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). Лаборатории Белла. ЦСТР 139.
  32. ^ Хьюм, Эндрю Г.; Фландрена, Боб (2002). «Ведение файлов на Плане 9 с помощью Мк» . Руководство программиста Plan 9 . AT&T Bell Laboratories. Архивировано из оригинала 11 июля 2015 года.
  33. ^ «google/kati: экспериментальный клон GNU make» . Гитхаб . 30 ноября 2020 г.
  34. ^ Мёлдер, Феликс; Яблонски, Ким Филипп; Летчер, Брайс; Холл, Майкл Б.; Томкинс-Тинч, Кристофер Х.; Сочат, Ванесса; Форстер, Ян; Ли, Сухён; Твардзиок, Свен О.; Каниц, Александр; Вильм, Андреас (19 апреля 2021 г.). «Анализ устойчивых данных с помощью Snakemake» . F1000Исследования . 10:33 . doi : 10.12688/f1000research.29032.2 . ISSN   2046-1402 . ПМК   8114187 . ПМИД   34035898 .
  35. ^ «GNU 'сделать' » . Фонд свободного программного обеспечения.
  36. ^ «Макепп» .
  37. ^ «Свободная версия BSD» .
  38. ^ Как отсортировать выходные данные командного файла Linux ls. Архивировано 13 сентября 2016 г. на Wayback Machine.
  39. ^ «makefile» . Документация разработчика Apple: унифицированные идентификаторы типов . Apple Inc.
  40. ^ Адамс П. и Соломон М., 1993, Обзор среды разработки программного обеспечения CAPITL. На Международном семинаре по управлению конфигурацией программного обеспечения (стр. 1–34). Берлин, Гейдельберг: Springer Berlin Heidelberg.
  41. ^ обзор dsls. Архивировано 23 октября 2007 г. на Wayback Machine , 27 февраля 2007 г., phoenix wiki.
  42. ^ Re: Хореография и REST. Архивировано 12 сентября 2016 г. в Wayback Machine , от Кристофера Б. Ферриса, 9 августа 2002 г.
  43. Makefiles Target Junior. Архивировано 7 января 2010 года в Wayback Machine , Эндрю В. Фитцгиббон ​​и Уильям А. Хоффман.
  44. ^ 3.1 Что содержат файлы Makefile , GNU make , Фонд свободного программного обеспечения
  45. ^ «Типы необходимых условий (GNU make)» . GNU.org . Проект ГНУ . Проверено 15 декабря 2020 г.
  46. ^ Перейти обратно: а б «Глава 15. Инструменты: make: автоматизация ваших рецептов», Искусство программирования для Unix , Эрик С. Рэймонд , 2003 г.
  47. ^ make – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  48. ^ make(1) FreeBSD по основным командам Руководство
  49. ^ Перейти обратно: а б "делать" . www.opengroup.org . Проверено 18 марта 2018 г.
  50. ^ «Руководство GNU make: правила суффиксов» . Фонд свободного программного обеспечения.
  51. ^ «Руководство GNU make: правила шаблонов» . Фонд свободного программного обеспечения.
  52. ^ См. раздел «Правила сопоставления шаблонов» на справочной странице SunPro. Архивировано 29 мая 2014 г. на Wayback Machine.
  53. ^ Автоматические переменные. Архивировано 25 апреля 2016 г. на Wayback Machine GNU `make'.

Внешние ссылки [ править ]


Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 7CDAC778E5B24D2BAC3CF711308F4127__1718805780
URL1:https://en.wikipedia.org/wiki/GNU_make
Заголовок, (Title) документа по адресу, URL1:
Make (software) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)