Сделать (программное обеспечение)
Парадигма | макро , декларативный |
---|---|
Разработано | Стюарт Фельдман |
Впервые появился | апрель 1976 г |
Язык реализации | С |
ТЫ | 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 : пригодные для печати, отлаживаемые и понятные вещи.- Стюарт Фельдман, Искусство программирования для Unix , Эрик С. Рэймонд, 2003 г.
До появления 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] [options] [targets]
Если цель не указана, Make обновляет первую цель в make-файле, которая часто является фиктивной целью, для выполнения наиболее часто используемого действия.
Make пропускает действия сборки, если временная метка целевого файла позже временной метки исходных файлов. [38] Это оптимизирует процесс сборки, пропуская действия, когда целевой файл обновлен, но иногда обновления пропускаются ошибочно из-за проблем с временной меткой файла, включая восстановление более старой версии исходного файла или когда сетевая файловая система является источником файлы, а его часы или часовой пояс не синхронизированы с компьютером, на котором работает Make. Кроме того, если временная метка исходного файла находится в будущем, make неоднократно запускает ненужные действия, что приводит к увеличению времени сборки.
Когда Make запускается, он использует make-файл, указанный в командной строке, а если он не указан, то затем использует файл, найденный с помощью определенных правил поиска. Обычно Make по умолчанию использует файл в рабочем каталоге с именем Makefile . GNU Make ищет первый соответствующий файл: GNU make-файл , make-файл или Makefile .
Make обрабатывает параметры командной строки на основе загруженного make-файла.
Makefile [ править ]
Единый идентификатор типа (UTI) | public.make-источник [39] |
---|
Язык makefile — это частично декларативное программирование , в котором конечные условия описываются, но порядок выполнения действий не описан. [40] [41] [42] [43] Этот тип программирования может сбить с толку программистов, привыкших к императивному программированию .
Makefiles могут содержать следующие конструкции: [44]
- Явное правило : определяет, когда и как обновлять цель; список предварительных условий (зависимых целей) и команд, определяющих действие обновления, называемое рецептом
- Неявное правило : определяет, когда и как переделать класс файлов на основе их имен; включая то, как цель зависит от файла с именем, похожим на цель, и рецептом обновления
- Определение переменной : связывает текстовое значение с именем, которое можно заменить в более позднем тексте.
- Директива : инструкция сделать что-то особенное, например включить другой make-файл.
- Комментарий : строка, начинающаяся с
#
Правила [ править ]
Каждое правило начинается со строки зависимости имени правила, , которая состоит из целевого за которым следует двоеточие (:) и, при необходимости, список целей, от которых зависит цель правила, а также его предварительные условия. [45]
target [target ...]: [component ...] Tab ↹[command 1] . . . Tab ↹[command n]
Обычно правило имеет одну цель, а не несколько.
За строкой зависимости может следовать рецепт; серия командных строк с отступом TAB , которые определяют, как сгенерировать цель из компонентов (т.е. исходных файлов). Если какое-либо предварительное условие имеет более позднюю временную метку, чем целевой файл, или целевой файл не существует в виде файла, рецепт выполняется.
Первая команда может появиться в той же строке после предварительных условий, разделенных точкой с запятой.
targets: prerequisites ; command
например,
hello: ; @echo "hello"
Каждая командная строка должна начинаться с символа табуляции. Несмотря на то, что пробел также является пробелом , для Make требуется табуляция. Поскольку это часто приводит к путанице и ошибкам, этот аспект синтаксиса make-файла подвергается критике; описан Эриком С. Рэймондом как «одна из худших ошибок проектирования в истории Unix». [46] и в «Руководстве для ненавистников Unix» говорится, что «использование табуляции как части синтаксиса похоже на одну из тех ловушек из палочек в «Зеленых беретах ». Фельдман объясняет свой выбор решением проблемы ранней реализации, сохраняющейся стремлением к обратной совместимости с самыми первыми пользователями:
Почему вкладка в столбце 1? Якк был новым, Лекс был совершенно новым. Я тоже не пробовал, поэтому решил, что это будет хороший повод поучиться. После того, как я запутался во время своего первого удара по Лексу, я просто сделал что-то простое с шаблоном новой строки-вкладки. Это сработало, оно осталось. А через несколько недель у меня было около дюжины пользователей, большинство из которых были друзьями, и я не хотел испортить свою встроенную базу. Остальное, к сожалению, уже история.
— Стюарт Фельдман [46]
GNU Сделать. начиная с версии 3.82 позволяет выбирать любой символ (один символ) в качестве префикса рецепта с помощью специальной переменной .RECIPEPREFIX, например:
.RECIPEPREFIX := :
all:
:@echo "recipe prefix symbol is set to '$(.RECIPEPREFIX)'"
Каждая команда выполняется в отдельной оболочке . Поскольку операционные системы используют разные оболочки, это может привести к созданию непереносимых make-файлов. Например, GNU Make (все версии POSIX) выполняет команды с /bin/sh по умолчанию Unix, команды такие как cp , тогда как обычно используются . В отличие от этого, nmake от Microsoft выполняет команды с помощью cmd.exe, где пакетные команды, такие как копирование доступны , но не обязательно cp.
Поскольку рецепт не является обязательным, строка зависимости может состоять исключительно из компонентов, ссылающихся на другие цели, например:
realclean: clean distclean
Следующий пример правила оценивается, когда Сделать обновление целевого файла.txt; то есть через make file.txt
. Если файл file.html новее, чем файл file.txt или файл file.txt не существует, запускается команда для создания файла file.txt из файла file.html.
file.txt: file.html
lynx -dump file.html > file.txt
Команда может иметь один или несколько следующих префиксов (после табуляции):
- минус (-) указывает на игнорирование ошибки команды
- at (@) указывает, что не выводится до ее выполнения. команда
- плюс (+) указывает на выполнение команды, даже если Make вызывается в режиме «не выполнять»
Игнорирование ошибок и подавление эха также можно получить с помощью специальных целей. .IGNORE
и .SILENT
. [47]
Microsoft NMAKE имеет предопределенные правила, которые можно исключить из этих make-файлов, например c.obj $(CC)$(CFLAGS)
.
Макросы [ править ]
Makefile может определять и использовать макросы. Макросы обычно называются переменными, если они содержат простые определения строк, например CC=clang
. Макросы в make-файлах могут быть переопределены в аргументах командной строки, передаваемых утилите Make. Переменные среды также доступны в виде макросов.
Например, макрос CC
часто используется в make-файлах для обозначения расположения C. компилятора При последовательном использовании во всем make-файле используемый компилятор можно изменить, изменив значение макроса, а не изменяя каждую команду правила, вызывающую компилятор.
Макросы обычно называются заглавными буквами :
MACRO = definition
Значение макроса может состоять из других значений макроса. Значение макроса увеличивается при каждом использовании ( лениво ).
Макрос используется путем расширения либо через $ NAME , либо через $( NAME ). Последнее безопаснее, так как пропуск скобок приводит к интерпретации следующей буквы после $
как полное имя переменной. В эквивалентной форме вместо круглых скобок используются фигурные скобки, т.е. ${}
, стиль, используемый в BSD .
NEW_MACRO = $(MACRO)-$(MACRO2)
Макросы могут состоять из команд оболочки с помощью оператора подстановки команд , обозначаемого обратными кавычками ( `
).
YYYYMMDD = ` date `
Синтаксис командной строки для переопределения макроса:
make MACRO="value" [MACRO="value" ...] TARGET [TARGET ...]
Makefiles могут получить доступ к предопределённым внутренним макросам , с помощью ?
и @
будучи общим.
target: component1 component2
# echo components YOUNGER than TARGET
echo $?
# echo TARGET name
echo $@
Общим синтаксисом при определении макросов, который работает в BSD и GNU Make, является использование += , ?= и != вместо знака равенства ( = ). [48]
Правила суффиксов [ править ]
Правила суффиксов имеют «цели» с именами в форме .FROM.TO
и используются для запуска действий на основе расширения файла. В командных строках правил суффиксов POSIX указывает [49] что внутренний макрос $<
относится к первой предпосылке и $@
относится к цели. В этом примере, который преобразует любой HTML-файл в текст, токен перенаправления оболочки >
является частью командной строки, тогда как $<
это макрос, ссылающийся на HTML-файл:
.SUFFIXES: .txt .html
# From .html to .txt
.html.txt:
lynx -dump $< > $@
При вызове из командной строки приведенный выше пример расширяется.
$ make -n file.txt
lynx -dump file.html > file.txt
Правила шаблона [ править ]
Правила суффиксов не могут иметь собственных предварительных условий. [50] Если они есть, они рассматриваются как обычные файлы с необычными именами, а не как правила суффиксов. GNU Make поддерживает правила суффиксов для совместимости со старыми make-файлами, но в остальном поощряет использование шаблонных правил . [51]
Правило шаблона выглядит как обычное правило, за исключением того, что его цель содержит ровно одно правило. %
символ внутри строки. Целью считается шаблон для сопоставления имен файлов: %
может соответствовать любой подстроке из нуля или более символов, [52] в то время как другие персонажи соответствуют только самим себе. Предпосылки также используют %
чтобы показать, как их имена связаны с целевым именем.
Приведенный выше пример правила суффикса будет выглядеть как следующее правило шаблона:
# From %.html to %.txt
%.txt : %.html
lynx -dump $< > $@
Как [ править ]
Однострочные комментарии начинаются с символа решетки (#).
Директива [ править ]
Директива определяет особое поведение, например включение другого make-файла.
Продолжение строки [ править ]
Продолжение строки обозначается обратной косой чертой. \
символ в конце строки.
target: component \ component Tab ↹command ; \ Tab ↹command | \ Tab ↹piped-command
Примеры [ править ]
Следующие команды относятся к следующему make-файлу.
make # updates first target, 'all'
make help # updates target 'help' to list targets
make dist # updates target 'dist' to build for distribution
PACKAGE = package
VERSION = ` date "+%Y.%m%d%" `
RELEASE_DIR = ..
RELEASE_FILE = $(PACKAGE)-$(VERSION)
# Default target
# note: variable LOGNAME comes from the environment
all:
echo "Hello $(LOGNAME), nothing to do by default"
echo "Try 'make help'"
# Display targets by searching this file
help:
egrep "^# target:" [Mm]akefile
# Make a release
dist:
tar -cf $(RELEASE_DIR)/$(RELEASE_FILE) && \
gzip -9 $(RELEASE_DIR)/$(RELEASE_FILE).tar
Ниже приведен простой make-файл, который по умолчанию (правило «все» указано первым) компилирует исходный файл с именем «helloworld.c» с использованием системного компилятора C, а также предоставляет «чистую» цель для удаления сгенерированных файлов, если пользователь того пожелает. начать все сначала. $@
и $<
являются двумя так называемыми внутренними макросами (также известными как автоматические переменные) и обозначают имя цели и «неявный» источник соответственно. В примере ниже $^
расширяется до списка предварительных условий, разделенного пробелами. Есть ряд других внутренних макросов. [49] [53]
CFLAGS ?= -g
all: helloworld
helloworld: helloworld.o
$(CC) $(LDFLAGS) -o $@ $^
helloworld.o: helloworld.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
$(RM) helloworld helloworld.o
Многие системы поставляются с предопределенными правилами Make и макросами для определения общих задач, таких как компиляция на основе суффикса файла. Это позволяет пользователям опустить фактические (часто непереносимые) инструкции о том, как сгенерировать цель из источника(ов). В такой системе приведенный выше make-файл можно изменить следующим образом:
all: helloworld
helloworld: helloworld.o
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
clean:
$(RM) helloworld helloworld.o
# suffix rule
.c.o:
$(CC) $(CFLAGS) -c $<
.SUFFIXES: .c
То, что «helloworld.o» зависит от «helloworld.c», теперь автоматически обрабатывается Make. В таком простом примере, как показанный здесь, это вряд ли имеет значение, но реальная сила правил суффиксов становится очевидной, когда количество исходных файлов в программном проекте начинает расти. Достаточно лишь написать правило для этапа компоновки и объявить объектные файлы обязательными. Затем Make неявно определяет, как создавать все объектные файлы, и ищет изменения во всех исходных файлах.
Простые правила суффиксов работают хорошо, пока исходные файлы не зависят друг от друга и от других файлов, таких как файлы заголовков. Другой способ упростить процесс сборки — использовать так называемые правила сопоставления с образцом, которые можно комбинировать с генерацией зависимостей с помощью компилятора. В качестве последнего примера, требующего компилятора gcc и GNU Make, вот общий make-файл, который компилирует все файлы C в папке в соответствующие объектные файлы, а затем связывает их с окончательным исполняемым файлом. Перед компиляцией зависимости собираются в формате, удобном для make-файла, в скрытый файл «.dependent», который затем включается в make-файл. Портативные программы должны избегать конструкций, используемых ниже.
# Generic GNUMakefile
# snippet to fail if not GNU
ifneq (,)
This makefile requires GNU Make.
endif
PROGRAM = foo
C_FILES := $(wildcard *.c)
OBJS := $(patsubst %.c, %.o, $(C_FILES))
CC = cc
CFLAGS = -Wall -pedantic
LDFLAGS =
LDLIBS = -lm
all: $(PROGRAM)
$(PROGRAM): .depend $(OBJS)
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(PROGRAM) $(LDLIBS)
depend: .depend
.depend: cmd = gcc -MM -MF depend $(var); cat depend >> .depend;
.depend:
@echo "Generating dependencies..."
@$(foreach var, $(C_FILES), $(cmd))
@rm -f depend
-include .depend
# These are the pattern matching rules. In addition to the automatic
# variables used here, the variable $* that matches whatever % stands for
# can be useful in special cases.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%: %.o
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f .depend $(OBJS)
.PHONY: clean depend
Отслеживание зависимостей [ править ]
Makefile состоит из зависимостей, а забытый или дополнительный файл может быть не сразу очевиден пользователю и может привести к тонким ошибкам в сгенерированном программном обеспечении, которые трудно обнаружить. Чтобы избежать этой проблемы и синхронизировать зависимости в исходном коде и make-файлах, можно использовать различные подходы. Один из подходов заключается в использовании компилятора для отслеживания изменений зависимостей. Например, GCC может статически анализировать исходный код и автоматически создавать правила для данного файла, используя -MM
выключатель. Другим подходом могут быть make-файлы или сторонние инструменты, которые будут генерировать make-файлы с зависимостями (например, набор инструментов Automake от GNU Project может делать это автоматически).
Другой подход — использовать инструменты мета-сборки, такие как CMake , Meson и т. д.
См. также [ править ]
- Граф зависимостей – ориентированный граф, представляющий зависимости.
- Список программного обеспечения для автоматизации сборки
Ссылки [ править ]
- ^ "V7/usr/src/cmd/make/ident.c" . tuhs.org . 1 сентября 2013 г. Архивировано из оригинала 1 сентября 2013 г. Проверено 18 марта 2018 г.
- ^ Фельдман, С.И. (апрель 1979 г.). «Создать --- программу для поддержки компьютерных программ». Программное обеспечение: практика и опыт . 9 (4): 255–265. CiteSeerX 10.1.1.39.7058 . дои : 10.1002/спе.4380090402 . S2CID 33059412 .
- ↑ Перейти обратно: Перейти обратно: а б Томпсон, Ти Джей (ноябрь 1980 г.). «Верстак дизайнера: обеспечение производственной среды». Технический журнал Bell System . 59 (9): 1811–1825. дои : 10.1002/j.1538-7305.1980.tb03063.x . S2CID 27213583 .
При общем обслуживании DWB мы использовали систему контроля исходного кода и утилиту make, предоставляемую интерактивной операционной системой PWB/UNIX*.
- ^ Мэтью Доар (2005). Практическая среда разработки . О'Рейли Медиа . п. 94. ИСБН 978-0-596-00796-6 .
- ^ «Группы Google» . arquivo.pt . Архивировано из оригинала 22 января 2011 года . Проверено 18 марта 2018 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «OpenSolaris в два (Джим Гризанцио)» . 12 декабря 2013 года. Архивировано из оригинала 12 декабря 2013 года . Проверено 18 марта 2018 г.
- ^ Гризанцио, Джим. История OpenSolaris .
- ↑ Перейти обратно: Перейти обратно: а б с «Разработка/Gbuild — The Document Foundation Wiki» . wiki.documentfoundation.org . Проверено 18 марта 2018 г.
- ↑ Перейти обратно: Перейти обратно: а б «Руководство по созданию Apache OpenOffice — Apache OpenOffice Wiki» . wiki.openoffice.org . Проверено 18 марта 2018 г.
- ^ Исходный код FreeBSD 2.0.5 Make , 1993 г.
- ↑ Перейти обратно: Перейти обратно: а б «Бсделать(1)» .
- ^ «Руководство по основным командам fmake(1)» .
- ^ "делать" . Страницы руководства NetBSD . Проверено 9 июля 2020 г.
- ^ «make(1) — страницы руководства OpenBSD» . man.openbsd.org . Проверено 18 марта 2018 г.
- ^ "делать" . FreeBSD . Проверено 9 июля 2020 г.
В make предусмотрены включение Makefile, условные структуры и циклы for, напоминающие язык программирования C.
- ^ Арнольд Роббинс (2005), Unix в двух словах, четвертое издание , О'Рейли
- ^ «8. Функции преобразования текста» , GNU make , Free Software Foundation, 2013 г.
- ^ «8.5 Функция foreach» , GNU make , Фонд свободного программного обеспечения, 2013 г.
- ^ «Изменения, новые функции и исправления серии выпусков GCC 3.4» . Фонд свободного программного обеспечения. 2006.
- ^ Хавьер Мартинес Канильяс (26 декабря 2012 г.). «Kbuild: система сборки ядра Linux» . Linux-журнал .
- ^ Грег Кроа-Хартман (2006), Ядро Linux в двух словах , О'Рейли
- ^ «Инструкция по сборке» .
- ^ Рокки Бернштейн. «Remake – GNU Make с понятной трассировкой и отладчиком» .
- ^ Гленн Фаулер (4 января 2012 г.). «Обзор nmake» . Исследования информационных и программных систем, исследования лабораторий AT&T. Архивировано из оригинала 2 сентября 2015 года . Проверено 26 мая 2014 г.
- ^ «Справочник NMAKE по Visual Studio 2015» . Майкрософт. 2015.
- ^ «Директивы предварительной обработки Makefile» . 2014.
- ^ «Операторы предварительной обработки Makefile» . Майкрософт. 2014.
- ^ «Пути поиска в правилах» . Майкрософт. 2014.
- ^ "ДЕЛАТЬ" . КодГир(ТМ). 2008.
- ^ «Джом — Qt Wiki» . Проект Qt. 2021.
- ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). Лаборатории Белла. ЦСТР 139.
- ^ Хьюм, Эндрю Г.; Фландрена, Боб (2002). «Ведение файлов на Плане 9 с помощью Мк» . Руководство программиста Plan 9 . Лаборатории AT&T Bell. Архивировано из оригинала 11 июля 2015 года.
- ^ «google/kati: экспериментальный клон GNU make» . Гитхаб . 30 ноября 2020 г.
- ^ Мёлдер, Феликс; Яблонски, Ким Филипп; Летчер, Брайс; Холл, Майкл Б.; Томкинс-Тинч, Кристофер Х.; Сочат, Ванесса; Форстер, Ян; Ли, Сухён; Твардзиок, Свен О.; Каниц, Александр; Вильм, Андреас (19 апреля 2021 г.). «Анализ устойчивых данных с помощью Snakemake» . F1000Исследования . 10:33 . doi : 10.12688/f1000research.29032.2 . ISSN 2046-1402 . ПМК 8114187 . ПМИД 34035898 .
- ^ «GNU 'сделать' » . Фонд свободного программного обеспечения.
- ^ «Макепп» .
- ^ «Свободная версия BSD» .
- ^ Как отсортировать выходные данные командного файла Linux ls. Архивировано 13 сентября 2016 г. на Wayback Machine.
- ^ «makefile» . Документация разработчика Apple: унифицированные идентификаторы типов . Apple Inc.
- ^ Адамс П. и Соломон М., 1993, Обзор среды разработки программного обеспечения CAPITL. На Международном семинаре по управлению конфигурацией программного обеспечения (стр. 1–34). Берлин, Гейдельберг: Springer Berlin Heidelberg.
- ^ обзор dsls. Архивировано 23 октября 2007 г. на Wayback Machine , 27 февраля 2007 г., phoenix wiki.
- ^ Re: Хореография и REST. Архивировано 12 сентября 2016 г. в Wayback Machine , от Кристофера Б. Ферриса, 9 августа 2002 г.
- ↑ Makefiles Target Junior. Архивировано 7 января 2010 года в Wayback Machine , Эндрю В. Фитцгиббон и Уильям А. Хоффман.
- ^ 3.1 Что содержат файлы Makefile , GNU make , Фонд свободного программного обеспечения
- ^ «Типы необходимых условий (GNU make)» . GNU.org . Проект ГНУ . Проверено 15 декабря 2020 г.
- ↑ Перейти обратно: Перейти обратно: а б «Глава 15. Инструменты: make: автоматизация ваших рецептов», Искусство программирования для Unix , Эрик С. Рэймонд , 2003 г.
- ^ Единая спецификация UNIX , версия 4 от Open Group. – Справочник по оболочке и утилитам,
- ^ FreeBSD по основным командам Руководство –
- ↑ Перейти обратно: Перейти обратно: а б "делать" . www.opengroup.org . Проверено 18 марта 2018 г.
- ^ «Руководство GNU make: правила суффиксов» . Фонд свободного программного обеспечения.
- ^ «Руководство GNU make: правила шаблонов» . Фонд свободного программного обеспечения.
- ^ См. раздел «Правила сопоставления с образцом» на справочной странице SunPro. Архивировано 29 мая 2014 г. на Wayback Machine.
- ^ Автоматические переменные. Архивировано 25 апреля 2016 г. на Wayback Machine GNU `make'.
Внешние ссылки [ править ]
