68 votes

Comment écrire des conditions multiples dans Makefile.am avec " else if ".

Je veux compiler mon projet avec autoconf/automake. Il y a 2 conditions définies dans mon configure.ac

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

Je veux séparer _LIBS de ces 2 conditions dans 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

mais else if HAVE_SERVER ne fonctionne PAS.

Comment écrire 'else if' dans makefile.am ?

133voto

R.D. Points 604

Le code de ptomato peut également être écrit de manière plus propre comme :

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

Cela ne répond pas à la question de l'OP mais comme c'est le premier résultat sur Google, je l'ajoute ici au cas où il serait utile à quelqu'un d'autre.

16voto

ptomato Points 24461

J'accepterais la réponse de ldav1s si j'étais vous, mais je veux juste souligner que "else if" peut être écrit en termes de "else" et "if" dans n'importe quelle langue :

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

(L'indentation est pour la clarté. N'indentez pas les lignes, elles ne fonctionneront pas. )

11voto

don Points 89
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

5voto

ldav1s Points 6880

Comme vous l'avez découvert, vous ne pouvez pas faire ça. Vous pouvez le faire :

libtest_LIBS = 

...

if HAVE_CLIENT
libtest_LIBS += libclient.la
endif

if HAVE_SERVER
libtest_LIBS += libserver.la
endif

5voto

user2133523 Points 31
ifdef $(HAVE\_CLIENT)
libtest\_LIBS = \\
    $(top\_builddir)/libclient.la
else
ifdef $(HAVE\_SERVER)
libtest\_LIBS = \\
    $(top\_builddir)/libserver.la
else
libtest\_LIBS = 
endif
endif

REMARQUE : NE PAS mettre en retrait le "if", sinon ça ne marchera pas !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X