Я прочитав кілька навчальних посібників щодо Makefiles, але для мене все ще незрозуміло, на що позначається ціль "усе" і що вона робить.
Якісь ідеї?
Я прочитав кілька навчальних посібників щодо Makefiles, але для мене все ще незрозуміло, на що позначається ціль "усе" і що вона робить.
Якісь ідеї?
Відповіді:
Збірка, як це розуміє Makefile, складається з безлічі цілей. Наприклад, для створення проекту, який може знадобитися
Якщо ви реалізували цей робочий процес за допомогою makefile, ви можете зробити кожну з цілей окремо. Наприклад, якщо ви писали
make file1.o
він створив би лише той файл, якщо потрібно.
Ім'я all
не вказано. Це просто умовна назва; all
target позначає, що якщо ви будете викликати його, make зробить все необхідне для повного складання . Зазвичай це фіктивна ціль, яка не створює жодних файлів, а залежить лише від інших файлів. Для прикладу, наведеного вище, створення всього необхідного - це створення виконавчих файлів, інші файли витягуються як залежності. Тож у makefile це виглядає приблизно так:
all: executable1 executable2
all
target, як правило, є першим у makefile, оскільки якщо ви просто пишете make
в командному рядку, не вказуючи ціль, він створить першу ціль. І ви очікуєте, що це буде all
.
all
зазвичай також є .PHONY
ціллю. Дізнайтеся більше тут .
Посібник для GNU Make дає чітке визначення all
у своєму переліку стандартних цілей .
Якщо автор Makefile дотримується цієї конвенції, то ціль all
повинна:
make
слід робити те ж саме make all
.Для досягнення 1 all
зазвичай визначають як .PHONY
ціль, яка залежить від виконуваних файлів, які формують всю програму:
.PHONY : all
all : executable
Для досягнення 2 all
слід або бути першою ціллю, визначеною у файлі make, або бути призначеною як мета за замовчуванням:
.DEFAULT_GOAL := all
Не впевнений, що це означає щось особливе. Це лише умова, що ви надаєте правило "все", і зазвичай воно використовується для перерахування всіх підцілей, необхідних для створення всього проекту, звідси і назва "всі". Єдине, в чому особливе - це те, що часто люди ставлять це в якості першої цілі в makefile, а це означає, що лише ввівши «зробити», це зробить те саме, що і «зробити все».
Цільове "все" є прикладом фіктивної цілі - на диску немає нічого, що називається "все". Це означає, що коли ви робите "зробити все", make завжди думає, що це потрібно для його створення, і тому виконує всі команди для цієї мети. Ці команди, як правило, є тими, що створюють усі кінцеві продукти, про які знає makefile, але вони можуть робити все, що завгодно.
Інші приклади фіктивних цілей - "чисті" та "встановлені", і вони працюють аналогічно.
Якщо ви ще цього не прочитали, вам слід прочитати посібник з виготовлення GNU , який також є чудовим посібником.