Почему я должен сделать a make target
перед способностью создать мой исходный код?
Строго говоря, что, делают цель точно?
Makefile-файлы выглядят так:
all: mybinary
mybinary: files.o it.o depends.o on.o
[tab]$(CC) $(CFLAGS) files.o it.o depends.o on.o -o mybinary
files.o: files.c files.h
[tab]$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
...
Это означает, что когда вы набираете , сделайте все
(сокращенно набираете make
), он будет следить за актуальностью целевого файла mybinary или файла. Для этого он должен убедиться, что mybinary новее, чем все файлы.о зависит. о и о. о. В противном случае он использует команды оболочки, указанные в следующей строке, для создания mybinary. Но перед этим он сначала проверяет актуальность файлов files.o и т. Д. Это означает, что они должны быть новее, чем files.c и files.h. В противном случае он использует команды оболочки, указанные в следующей строке, для создания файлов. O. Как только все файлы * .o будут обновлены, он сможет создавать mybinary. Как только mybinary создан, все цели удовлетворены.
Целями обычно являются просто файлы. Формат блока:
target: list of dependency files
[tab]shell commands to build target if it's older than any of its dependencies
[tab]more shell commands
[tab]still more
Цели также могут быть указаны с использованием подстановочных знаков, например %. C
означает, что в оболочке вы бы назвали *. C
.
Некоторые цели являются «фальшивыми», что означает, что они не соответствуют никакому реальному файлу. Цель «все» такого рода. То же самое с "чистой" целью ( make clean
). И так далее. На самом деле вам не нужно и не нужно создавать файл под названием «все» или «чистый». Есть разные способы указать, что цель фальшивая.
Первая цель, которая появится в Makefile, будет вызвана, если вы просто наберете make
. Согласно одному соглашению, эта цель называется «все». Тогда make
будет таким же, как make all
.
Файл makefile
обычно содержит код для создания программы, установки программы, последующей очистки и прочего.
поэтому слово target
может быть различными ключевыми словами, такими как all
, install
, clean
и т.д.
Это способ сказать make что-то. сделать все
подразумевает сделать все
make
- это распространенный инструмент разработки, который проверяет даты файлов между файлами исходного кода и созданным из них объектным кодом и компилирует тот, в котором источник новее. Для этого используется файл, называемый make-файлом, в котором перечислены файлы, которые необходимо сравнить.
Стандартный синтаксис: make / f makefile myprog.exe
Это говорит о том, что нужно собрать myprog.exe, используя список файлов в make-файле. По умолчанию makefile имеет значение makefile.mak
, поэтому, если вы используете это имя, вам не нужно указывать его в командной строке.
myprog.exe
здесь называется целью. Один из приемов заключается в том, что вы можете поместить в make-файл список инструкций по сборке для несуществующего файла. Если вы затем скажете создать эту цель, она запустит эту команду. Часто вы увидите что-то вроде make clean
, при котором временный файл удален.
Цель make - это, по сути, файл, который вы хотите перестроить.
Make не может предугадать, что вы хотите построить, поэтому вы должны сказать ему, неявно или явно, что он должен построить. Часто первая цель в файле - это такое имя, как «all», и если вы запустите «make» без какой-либо явной цели, она построит первую цель, указанную в make-файле. Однако в некоторых make-файлах не указывается цель; тогда вы должны указать его в командной строке. Или, если вы не хотите, чтобы цель по умолчанию была построена, вы должны указать цель, которую хотите построить.
Цель также может быть «фальшивой» в терминах GNU make. То есть это имя не существует, и правила не создают его, но оно (фальшивая цель) зависит от ряда других файлов, с которыми действительно связаны правила. Действительно, цель «все» - это обычно фальшивая цель - в большинстве каталогов нет файла с именем «все».