Makefile if else syntax error: unexpected end of file

a marqué ce sujet comme résolu.

Salut à tous, désolé si la question peut vous paraitre débile mais je suis un noob en makefile et je n’arrive pas à corriger mon erreur qui est:

/bin/bash: -c: line 1: syntax error: unexpected end of file

Voici mon code:

genes: $(SPECIESFILEPATH) $(OUTPUT_DIR)go go.obsolete
    @$(MYSQL) -e "SELECT CONCAT(s.speciesId, '__', s.genomeSpeciesId, '__', s.genus, '_', REPLACE(s.species, ' ', '_'), '__', d.dataSourceName) FROM species s, dataSource d WHERE s.dataSourceId=d.dataSourceId ORDER BY s.speciesId" | grep -v 'speciesId' >$@.tmp
    @if [[ -s $@.tmp ]]; then echo -n; else echo "NO species in file"; exit 2; fi
    # Insert gene 
    @for sp in `cat $@.tmp`; do \
        export PERL5LIBORI=$$PERL5LIB; \
        echo "species: $$sp"; \
        if [[ `echo $$sp | grep 'non_Ensembl$$'` ]]; then \
            perl myscript_V1.pl >> $@.tmp 2>>$@.err; \
        else
            if [[ `echo $$sp | grep 'Ensembl$$'` ]]; then \
                export PERL5LIB=`echo $$PERL5LIB | perl -ne 'print join ":", map { s/\/ensembl\//\/ensembl_$(ENS_API_RELEASE)\//; $$_ } grep { /\w/ } split(/:/, $$_)'`; \
            elif [[ `echo $$sp | grep 'EnsemblMetazoa$$'` ]]; then \
                export PERL5LIB=`echo $$PERL5LIB | perl -ne 'print join ":", map { s/\/ensembl\//\/ensembl_$(ENSMETAZOA_API_RELEASE)\//; $$_ } grep { /\w/ } split(/:/, $$_)'`; \
            perl myscript_V2.pl >> $@.tmp 2>>$@.err; \
            fi; \
        fi; \
        export PERL5LIB=$$PERL5LIBORI; \
    done
    @if [[ -s $@.err ]]; then echo -n; else $(RM) $@.err; fi
    @$(MV) $@.tmp $@
+0 -0

Bonjour, tu ne nous aides pas du tout à t’aider. ^^"

Un des concertes de Makefile est que chaque ligne est exécutée dans un shell indépendant (sauf s’il est explicitement demandé de traiter plusieurs ligne en même temps en finissant une ligne par "\").

Du coup, ton message d’erreur signifie « Y a une ligne qui est pas complète ».

C’est intéressant mais on sait pas laquelle (et en plus, on peut pas lancer le Makefile vu qu’il nous en manque une partie). Une manière de savoir aurait été de retirer les "@" en début de ligne.

Je t’invite à nous donner l’erreur complète en retirant les "@" afin qu’on sache où chercher (certainement qu’on peut trouver sans, mais ce sera bien plus simple), ou à nous donner l’ensemble de ton Makefile que l’on puisse le faire nous même.

+0 -0

Deux choses utiles :

  • lorsque tu appelles make, donne lui l’argument VERBOSE=1 afin qu’il te sorte plus d’informations ; tout simplement comme ça :
make VERBOSE=1
  • la syntaxe de make impose des tabulations, c’est-à-dire :
genes: $(SPECIESFILEPATH) $(OUTPUT_DIR)go go.obsolete
<--TAB-->@$(MYSQL) -e "SELECT CONCAT(s.speciesId, '__', s.genomeSpeciesId, '__', s.genus, '_', REPLACE(s.species, ' ', '_'), '__', d.dataSourceName) FROM species s, dataSource d WHERE s.dataSourceId=d.dataSourceId ORDER BY s.speciesId" | grep -v 'speciesId' >$@.tmp
<--TAB-->@if [[ -s $@.tmp ]]; then echo -n; else echo "NO species in file"; exit 2; fi

Une erreur courante consiste à mettre des espaces à la place (parfois à cause d’un éditeur mal configuré). Et ça plante.

Édit : c’est normal, comme syntaxe $$PERL5_LIB ? Parce que ce que ça va faire, c’est afficher la variable $, puis la chaine PERL5LIB, ce qui n’est probablement pas le comportement voulu. Chez moi,

~/ echo $PERL5_LIB

~/ echo $$PERL5_LIB
1897PERL5_LIB
~/ echo $$         
1897
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte