2011-05-16 23 views
12

Makefile'de ayrıntılı bir derlemeyi etkinleştirmek istiyorum, ancak koşullu OR'u nasıl oluşturacağımı anlayamıyorum. Koşullu VEYA makefile

Anlatayım: Ben V=1 veya VERBOSE=1 ayarlayarak ayrıntılı derleme ya belirtmek isterler. Size onunla faydalanmak (ve VERBOSE sadece farkında diğer Makefile kullanın)

bazı komut dosyaları var çünkü VERBOSE=1 kullanılır olmasını istediğiniz Yani sonuç bu iki komut aynı olduğunu olmalıdır:

make all VERBOSE=1 # pain to write 
make all V=1 

: Ben başarmak istiyorum ne

ifdef VERBOSE 
[issue compilation commands with verbose mode] 
endif 

C önişlemci yakındır: Şimdi benim makefile bu bugün gibi görünüyor

Bunu nasıl yapacağınızı biliyor musunuz?

+0

ifeq http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or –

cevap

11

böyle yapın: Benzer

ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" "" 

endif 

$ (şerit yaklaşımı, ancak daha sezgisel $ kullanarak (ya anahtar kelimeye

+1

Niiiiice, bu daha net. Ben ya da bilmiyordum. – Gui13

+0

Cevabınızı kabul etmek için değiştirdim, çünkü bu, sorunumu semantik olarak tam olarak çözüyor. – Gui13

4

Bildiğim kadarıyla, GNU yapımındaki koşullu öğeler OR'leri ve ANDS'ye izin vermiyor. Hep böyle bir şey yapabileceğini:

ifdef VERBOSE 
DOVERBOSE = yes 
endif 
ifdef V 
DOVERBOSE = yes 
endif 

ifeq($DOVERBOSE, yes) 
    main verbose stuff here 
endif 

ama (pek kendini documenting) tanıtmak ilk etapta V'in tanımlamanız gerekir neden görmüyorum.

+0

Nasıl ifdef V \ VERBOSE = v \ endif' ve geri kalanını olduğu gibi bırakın? – Beta

+0

@Beta da fena değil! Ama cevabını daha çok beğendim. – Gui13

3

Neil Butterworth yaklaşımını gibi ama gerçekten açıkladığınız tarzında yapmak istiyorsanız, bu size vermek VEYA olacaktır:

ifneq "$(strip $(VERBOSE) $(V))" "" 
[be verbose] 
endif 
+0

Bu mükemmel :) – Gui13

3
VERBOSE := $(or $(VERBOSE),$(V)) 

... sonra ...

ifeq ($(VERBOSE),1) 
#Conditional stuff 
endif 
0

Tamam, gerçekten geç partiye, ama bu geldi ve nasıl makefiles mantığı eklemek aradılar diğerleri için başka bir çözüm eklemek istedim: temelde, mantığı bir kabukta yapın ve çıktıyı bu şekilde alın.

ifneq ($(shell ([ $(VERBOSE) ] || [ $(V) ]) && echo y),) 

daha dolambaçlı görünüyor, ancak birçok Eleştiri ve ors ile eğer deyimi varsa, bu bir esneklik sunar ve .. yuvalanmış $ (ve daha kolay okunur olacağını $ (veya .. .)) ifadeler.

+0

"Çok fazla esneklik sunar" - bunu kodladığınız belirli kabuğu (sizin durumunuzda, BASH) kullanmanızı sınırlaması dışında – villapx