2011-11-09 17 views
39

Voglio compilare il mio progetto con autoconf/automake. Ci sono 2 condizioni definite nel mio configure.acCome scrivere più condizioni in Makefile.am con "else if"

AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1) 
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1) 

voglio separare _LIBS da questi 2 condizioni in Makefile.am

if HAVE_CLIENT 

libtest_LIBS = \ 

    $(top_builddir)/libclient.la 

else if HAVE_SERVER 

libtest_LIBS = \ 

    $(top_builddir)/libserver.la 

else 

libtest_LIBS = 

endif 

ma else if HAVE_SERVER non funziona.

Come scrivere 'else if' in makefile.am?

risposta

3

Come hai scoperto, non puoi farlo. Si può fare:

libtest_LIBS = 

...

if HAVE_CLIENT 
libtest_LIBS += libclient.la 
endif 

if HAVE_SERVER 
libtest_LIBS += libserver.la 
endif 
+0

Sì, questo è buono. Grazie per la tua risposta, ma in realtà ho 3 condizioni. CLIENT, SERVER, non-CLIENT-non-SERVER. Non so come aggiungere la terza condizione nel mio codice. – Wind

+0

In realtà ci sono 4 condizioni in AM_CONDITIONAL:! CLIENT &&! SERVER,! CLIENT && SERVER, CLIENT && SERVER, CLIENT &&! SERVER. Questa risposta funzionerà con tutte queste condizioni. Per la "terza condizione" (! CLIENT &&! SERVER) libtest_LIBS è impostato sul valore desiderato nel "else if". – ldav1s

13

avrei accettato ldav1s' risposta se fossi in te, ma voglio solo far notare che 'else if' può essere scritto in termini di 'altro e' se di in qualsiasi lingua: (. Il rientro è per chiarezza non rientrare le righe, non funzioneranno.)

if HAVE_CLIENT 
    libtest_LIBS = $(top_builddir)/libclient.la 
else 
    if HAVE_SERVER 
    libtest_LIBS = $(top_builddir)/libserver.la 
    else 
    libtest_LIBS = 
    endif 
endif 

codice
+0

Ho provato questo, ma non ci sono riuscito. È possibile che Makefile.am non supporti le condizioni ricorsive. – Wind

+0

Hai rimosso il rientro? Tutte queste affermazioni dovrebbero iniziare nella colonna 1. – ptomato

+0

Spiacente, non ho rimosso il rientro, ci proverò. – Wind

72

di ptomato può anche essere scritta in un modo più pulito come:

 
ifeq ($(TARGET_CPU),x86) 
    TARGET_CPU_IS_X86 := 1 
else ifeq ($(TARGET_CPU),x86_64) 
    TARGET_CPU_IS_X86 := 1 
else 
    TARGET_CPU_IS_X86 := 0 
endif 

Questo non risponde alla domanda del PO, ma in quanto è il primo risultato su google, sto aggiungendo qui nel caso in cui è utile a chiunque altro.

+7

ma qui è necessario mettere due 'endif' insieme allo stesso livello di indentazione, che complessivamente non sarebbe bello sia – amc

+1

@amc nell'esempio sopra è sufficiente un singolo' endif', che ho appena aggiunto. Il problema con il rientro è dato in tutti i casi (quando si usa un blocco 'else' più grande/nidificato). – blueyed

9
ifeq ($(CHIPSET),8960) 
    BLD_ENV_BUILD_ID="8960" 
else ifeq ($(CHIPSET),8930) 
    BLD_ENV_BUILD_ID="8930" 
else ifeq ($(CHIPSET),8064) 
    BLD_ENV_BUILD_ID="8064" 
else ifeq ($(CHIPSET), 9x15) 
    BLD_ENV_BUILD_ID="9615" 
else 
    BLD_ENV_BUILD_ID= 
endif 
1
 
ifdef $(HAVE_CLIENT) 
libtest_LIBS = \ 
    $(top_builddir)/libclient.la 
else 
ifdef $(HAVE_SERVER) 
libtest_LIBS = \ 
    $(top_builddir)/libserver.la 
else 
libtest_LIBS = 
endif 
endif 

NOTA: NON trattino il caso allora non funzionano!