Що означає "все" у файлі?


105

Я прочитав кілька навчальних посібників щодо Makefiles, але для мене все ще незрозуміло, на що позначається ціль "усе" і що вона робить.

Якісь ідеї?

Відповіді:


116

Збірка, як це розуміє Makefile, складається з безлічі цілей. Наприклад, для створення проекту, який може знадобитися

  1. Створіть file1.o з file1.c
  2. Створіть файл2.o з file2.c
  3. Створіть файл3.o з file3.c
  4. Створіть виконуваний файл1 з file1.o та file3.o
  5. Створіть виконуваний файл2 з file2.o

Якщо ви реалізували цей робочий процес за допомогою makefile, ви можете зробити кожну з цілей окремо. Наприклад, якщо ви писали

make file1.o

він створив би лише той файл, якщо потрібно.

Ім'я allне вказано. Це просто умовна назва; alltarget позначає, що якщо ви будете викликати його, make зробить все необхідне для повного складання . Зазвичай це фіктивна ціль, яка не створює жодних файлів, а залежить лише від інших файлів. Для прикладу, наведеного вище, створення всього необхідного - це створення виконавчих файлів, інші файли витягуються як залежності. Тож у makefile це виглядає приблизно так:

all: executable1 executable2

alltarget, як правило, є першим у makefile, оскільки якщо ви просто пишете makeв командному рядку, не вказуючи ціль, він створить першу ціль. І ви очікуєте, що це буде all.

allзазвичай також є .PHONYціллю. Дізнайтеся більше тут .


31

Посібник для GNU Make дає чітке визначення allу своєму переліку стандартних цілей .

Якщо автор Makefile дотримується цієї конвенції, то ціль allповинна:

  1. Складіть всю програму, але не будуйте документацію.
  2. Будьте типовою ціллю. Як і в бігу просто makeслід робити те ж саме make all.

Для досягнення 1 allзазвичай визначають як .PHONYціль, яка залежить від виконуваних файлів, які формують всю програму:

.PHONY : all
all : executable

Для досягнення 2 allслід або бути першою ціллю, визначеною у файлі make, або бути призначеною як мета за замовчуванням:

.DEFAULT_GOAL := all

3

Не впевнений, що це означає щось особливе. Це лише умова, що ви надаєте правило "все", і зазвичай воно використовується для перерахування всіх підцілей, необхідних для створення всього проекту, звідси і назва "всі". Єдине, в чому особливе - це те, що часто люди ставлять це в якості першої цілі в makefile, а це означає, що лише ввівши «зробити», це зробить те саме, що і «зробити все».


2

Цільове "все" є прикладом фіктивної цілі - на диску немає нічого, що називається "все". Це означає, що коли ви робите "зробити все", make завжди думає, що це потрібно для його створення, і тому виконує всі команди для цієї мети. Ці команди, як правило, є тими, що створюють усі кінцеві продукти, про які знає makefile, але вони можуть робити все, що завгодно.

Інші приклади фіктивних цілей - "чисті" та "встановлені", і вони працюють аналогічно.

Якщо ви ще цього не прочитали, вам слід прочитати посібник з виготовлення GNU , який також є чудовим посібником.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.