"Make" uygulaması, herhangi bir hedef belirtilmezse oluşturulacak varsayılan hedefi nasıl bilebilir?


188

Çoğu linux uygulaması aşağıdakilerle derlenir:

make
make install clean

Anladığım kadarıyla, yap hedeflerinin isimlerini argüman olarak alır. Yani installbazı dosyaları kopyalar ve bundan sonra bir hedeftir cleangeçici dosyaları siler bir hedeftir.

Ancak make, hiçbir argüman belirtilmezse hangi hedefi oluşturur (örn. Örneğimdeki ilk komut)?

Yanıtlar:


233

Varsayılan olarak, bir ile başlamıyor ilk hedefi işleyerek başlar .aka varsayılan hedefi ; bunu yapmak için, diğer hedefleri, özellikle de ilk hedefin bağlı olduğu hedefleri işlemesi gerekebilir.

GNU Manuel olun kapaklarını bütün bu şeyleri ve şaşırtıcı derecede kolay ve bilgilendirici bir okuma.


61
İlk hedefi çağırmak allsadece bir kongre.
Tobu

1
Diğer kullanıcılar için yüklüyorsanız, bunları ayrı olarak çalıştırmak yararlıdır, çünkü o zaman make installtüm yapıyı değil, yalnızca sudo'da çalıştırmanız gerekir .
Scott Wales

2
Yapmak için varsayılan adam girişi FYI, bir hedef belirtmediğinizde ne olduğundan bahsetmez ..
Sekm

2
GNU manuel yapmak bu şeyleri kapsıyorsa, neden bu soru soruldu? Kılavuz, kuralların nasıl yazılacağını belgelemekte harika, ancak bir Makefile'nin nasıl yazılacağı hakkında hiçbir söz vermiyor.
Nick

1
includeİlk hedefi olan başka bir makefile olan bir make dosyasına bakıyorum %.o : %.cpp. Yani varsayılan hedef ... tüm .cpp dosyalarını oluşturmak?
Qwertie

178

Diğerlerini birkaç saniye kaydetmek ve kılavuzu okumak zorunda kalmamak için kısa yanıt. Bunu make dosyanızın üstüne ekleyin:

.DEFAULT_GOAL := mytarget

mytarget artık "make" yürütülürse ve hedef belirtilmezse çalıştırılan hedef olur.

Daha eski bir make sürümünüz varsa (<= 3.80), bu işe yaramaz. Bu durumda, anon'dan bahsettiğiniz şeyi yapabilirsiniz, bunu make dosyanızın üstüne ekleyin:

.PHONY: default
default: mytarget ;

Referanslar: https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathan Birisi herhangi bir parametre olmadan "make" yaparsa mytarget'ı varsayılan hedef yapar.
Samuel

1
.DEFAULT_GOAL, GNU make v3.80'de desteklenmiyor gibi görünüyor ve önceki sürümleri de kabul ediyorum (v3.81 bunu destekliyor). Daha eski bir make sürümü çalıştırıyorsanız, varsayılan hedefinizin make dosyanızdaki ilk / en üst hedef olduğundan emin olmanız gerekir.
Samuel

4
"... kılavuzu okumak zorunda kalmamak için" SO noktalarından biridir: aksi takdirde eski belgelerde kazmak için biraz zaman alacak sorulara hızlı cevaplar.
WattsInABox

1
"Bunu make dosyanızın üstüne ekleyin": Üste eklemek bir gereklilik gibi görünmüyor.
Aman Deep Gautam

2
Bu doğru cevap olmalı. Bu durumda üstü kapalı kazançlar açıktır.
Sion

34

GNU Make ayrıca, varsayılan özel hedef adı verilen özel bir değişken kullanarak belirlemenizi sağlar .DEFAULT_GOAL. Hatta bu değişkeni Makefile'nin ortasından kaldırarak dosyadaki bir sonraki hedefin varsayılan hedef olmasına neden olabilir.

Ref: Gnu Make manual - Özel Değişkenler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.