2012-02-01 3 views
5

Esiste un tipo di if/else statemant compatibile con GNU make e Berkley make (freeBSD)?make & gmake compatible if else statment

GNU Make:

ifeq ($(BUILD_TYPE), debug) 

Berkley marca:

.ifdef (BUILD_TYPE) 
+2

Si noti che queste due linee NON testano la stessa cosa! –

+0

i suoi unici esempi di sintassi make & gmake. le domande sono sopra. GNU "ifeq" è ".if" berkley è equivalente. lo so. – abrahab

+0

Perché non usare 'automake' e far sì che gestisca le condizioni per te, portabilmente? –

risposta

5

No. Il meglio che puoi fare è utilizzare includono file con nomi costruiti, come:

include $(BUILD_TYPE).mk 

dove BUILD_TYPE sarà "debug" o qualsiasi altra cosa. Questo non è certamente così potente come se/else, ma può fare bene un insieme limitato di cose, in modo portatile.

In generale è quasi impossibile scrivere un makefile portatile che utilizza qualsiasi funzione più sofisticata rispetto alle nozioni di base fornite da POSIX. La sintassi del makefile è così libera e libera, eppure le funzionalità fornite dalla marca tradizionale e dallo standard POSIX sono così anemiche, che la maggior parte dei produttori ha creato un gran numero di estensioni non compatibili.

Generalmente quando la gente si chiede questo, io raccomando che usano automake, che si prende cura del noioso lavoro di scrittura di makefile portatili per te, oppure si impegnano a fare una o l'altra e semplicemente richiedono alle persone di costruirla loro non ce l'hanno Di sicuro GNU funzionerà su una vasta gamma di piattaforme ... anche su piattaforme non POSIX.