Jump to content

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

Делать
Парадигма макро , декларативный
Разработано Стюарт Фельдман
Впервые появился апрель 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]
  • Qt Project является Инструмент 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
Единый идентификатор типа (UTI) public.make-источник [39]

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

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

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

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

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

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

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

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

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

например,

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

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

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

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

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

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

Каждая команда выполняется в отдельной оболочке . Поскольку операционные системы используют разные оболочки, это может привести к созданию непереносимых make-файлов. Например, GNU Make (все версии POSIX) выполняет команды с /bin/sh по умолчанию Unix, команды такие как cp , тогда как обычно используются . В отличие от этого, nmake от Microsoft выполняет команды с помощью 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. ^ Jump up to: а б Томпсон, Ти Джей (ноябрь 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. ^ Jump up to: а б с «Разработка/Gbuild — The Document Foundation Wiki» . wiki.documentfoundation.org . Проверено 18 марта 2018 г.
  9. ^ Jump up to: а б «Руководство по созданию Apache OpenOffice — Apache OpenOffice Wiki» . wiki.openoffice.org . Проверено 18 марта 2018 г.
  10. ^ Исходный код FreeBSD 2.0.5 Make , 1993 г.
  11. ^ Jump up to: а б «Бсделать(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. Архивировано из оригинала 11 июля 2015 года.
  33. ^ "google/kati: экспериментальный клон GNU make" . Гитхаб . 30 ноября 2020 г.
  34. ^ Мёлдер, Феликс; Яблонски, Ким Филипп; Летчер, Брайс; Холл, Майкл Б.; Томкинс-Тинч, Кристофер Х.; Сочат, Ванесса; Форстер, Ян; Ли, Сухён; Твардзиок, Свен О.; Каниц, Александр; Вильм, Андреас (19 апреля 2021 г.). «Анализ устойчивых данных с помощью Snakemake» . F1000Исследования . 10:33 . дои : 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. ^ Jump up to: а б «Глава 15. Инструменты: make: автоматизация ваших рецептов», Искусство программирования для Unix , Эрик С. Рэймонд , 2003 г.
  47. ^ make – Справочник по оболочке и утилитам, Единая спецификация UNIX , версия 4 от Open Group.
  48. ^ make(1) FreeBSD по основным командам Руководство
  49. ^ Jump up to: а б "делать" . 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
Номер скриншота №: 525468251aa8a914d0e4ff816b203eb6__1718805780
URL1:https://arc.ask3.ru/arc/aa/52/b6/525468251aa8a914d0e4ff816b203eb6.html
Заголовок, (Title) документа по адресу, URL1:
Make (software) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)