Что такое «сделать цель»? - PullRequest
       18

Что такое «сделать цель»?

18 голосов
/ 16 февраля 2010

Почему мне нужно сделать make target, прежде чем я смогу собрать свой исходный код?

В частности, что такое сделать цель точно?

Ответы [ 4 ]

24 голосов
/ 16 февраля 2010

Makefiles выглядят так:

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 all (сокращение просто наберет make), то убедитесь, что mybinary target или file обновлены. Для этого необходимо убедиться, что mybinary новее, чем все файлы.o it.o зависит.o и on.o. Если нет, то он использует команды оболочки, указанные в следующей строке, для сборки mybinary. Но прежде чем сделать это, он сначала проверяет актуальность файлов .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). И так далее. Вам не нужно или не нужно создавать файл с именем «all» или «clean». Существуют различные способы указать, что цель является фальшивой.

Первая цель, которая появится в Makefile, будет вызвана, если вы просто наберете make. Одно соглашение состоит в том, чтобы назвать эту цель "все". Тогда make будет таким же, как make all.

6 голосов
/ 16 февраля 2010

«make target» - это файл, который вы хотите восстановить.

Make не может предугадать, что вы хотите построить, поэтому вы должны прямо или косвенно сказать, что он должен построить. Часто первая цель в файле - это имя, например «all», и если вы запустите «make» без какой-либо явной цели, она создаст первую цель, указанную в make-файле. Тем не менее, некоторые make-файлы не указывают никакой цели; тогда вы должны указать один в командной строке. Или, если вы не хотите, чтобы была создана цель по умолчанию, вы должны указать цель, которую вы хотите построить.

Цель также может быть «фальшивой» в терминах GNU make. То есть это имя не существует, и правила не создают его, но оно (фиктивная цель) зависит от ряда других файлов, с которыми связаны правила. Действительно, цель «all» обычно является фальшивой целью - в большинстве каталогов нет файла с именем «all».

2 голосов
/ 16 февраля 2010

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

, поэтому слово target может быть различными ключевыми словами, такими как all, install, clean и т. Д.

Это способ сказать, сделать что-то . make all подразумевает сделать все

1 голос
/ 16 февраля 2010

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

Стандартный синтаксис: make /f makefile myprog.exe

Это говорит о том, что для сборки myprog.exe используется список файлов в makefile. По умолчанию make-файл равен makefile.mak, поэтому, если вы используете это имя, вам не нужно указывать его в командной строке.

myprog.exe здесь называется целью. Одна хитрость заключается в том, что вы можете поместить в make-файл список инструкций по сборке для несуществующего файла. Если вы затем скажете, чтобы построить эту цель, она запустит эти команды. Часто вы видите что-то вроде make clean, в котором удален временный файл.

...