Як додаток "Зробити" знати ціль за замовчуванням для створення, якщо не вказано ціль?


187

Більшість програм для Linux складаються з:

make
make install clean

Як я це зрозумів, make приймає назви цілей побудови як аргументів. Так installє ціль, яка копіює деякі файли, а після цього clean- ціль, яка видаляє тимчасові файли.

Але яка мета буде makeбудуватися, якщо аргументи не вказані (наприклад, перша команда в моєму прикладі)?

Відповіді:


231

За замовчуванням, вона починається з обробкою першої мети , яка починається з .акой мети за замовчуванням ; для цього, можливо, доведеться обробляти інші цілі, зокрема, ті, від яких залежить перша мета.

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


61
Виклик першої цілі all- це лише умова.
Тобу

1
Корисно запускати їх окремо, якщо ви встановлюєте для інших користувачів, так як тоді потрібно запустити тільки make installsudo, а не всю збірку.
Скотт Уельс

2
FYI, за замовчуванням, людина для make не згадує про те, що станеться, коли ви не вкажете ціль.
Sekm

2
Якщо GNU виготовляє посібник, висвітлює цей матеріал, чому це питання було задано? Посібник чудово описує, як писати правила, але не згадує, як написати Makefile.
Нік

1
Я дивлюся на файл includemake з іншим makefile, першою метою якого є %.o : %.cpp. Отже, ціль за замовчуванням - це ... створити всі .cpp файли?
Qwertie

176

Щоб заощадити інших на кілька секунд і врятувати їх від необхідності читати посібник, ось коротка відповідь. Додайте це до початку файлу make:

.DEFAULT_GOAL := mytarget

mytarget тепер буде цільовою ланкою, яка виконується, якщо виконується "make" і не вказана ціль.

Якщо у вас є старша версія make (<= 3,80), це не працюватиме. Якщо це так, то ви можете зробити те, про що згадується, просто додати це до початку файлу make:

.PHONY: default
default: mytarget ;

Посилання: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathan Це робить мій ціль за замовчуванням, якщо хтось виконує "make" без будь-яких параметрів.
Самуїл

1
Зауважте, що .DEFAULT_GOAL не підтримується в GNU make v3.80, і я б припускав і попередні версії (хоч v3.81 підтримує його). Якщо ви використовуєте старішу версію make, вам доведеться переконатися, що ваша мета за замовчуванням є першою / найвищою ціллю у вашому файлі make.
Самуїл

4
"... щоб врятувати їх від необхідності читати посібник" - один із пунктів ТА: швидкі відповіді на запитання, які в іншому випадку потребують певного часу, щоб копатись у стародавній документації.
WattsInABox

1
"Додайте це до початку файлу make": Додавання до початку не видається обов'язковою.
Аман Глибокий Гаутам

2
Це має бути правильна відповідь. Явне над неявними перемогами в цьому випадку.
Сіон

34

GNU Make також дозволяє вказати ціль make target за замовчуванням за допомогою спеціальної змінної, яка називається .DEFAULT_GOAL. Можна навіть зняти цю змінну в середині Makefile, в результаті чого наступна ціль у файлі стане цільовою за замовчуванням.

Посилання: Посібник з Gnu Make - спеціальні змінні

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