# Erreur dans un makefile

**URL:** <https://www.debian-fr.org/t/erreur-dans-un-makefile/21032>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032 "2016-02-20T20:22:06Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Eric75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/eric75/32/4483_2.png) [@Eric75](https://www.debian-fr.org/u/Eric75)\
**Post date:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/1 "2016-02-20T20:22:06Z")

</div>

Bonjour à tous,

Mon problème initial :  
A partir des fichiers xml du “[Guide avancé d’écriture des scripts Bash](http://abs.traduc.org/index.html)”, je voulais générer les fichiers html puis le pdf de leur dernière traduction française…  
J’ai donc récupéré, à priori, tout ce qu’il fallait… dont le makefile que voici :

[code]VERSION := $(shell grep “” abs-book.xml | tr -d "[a-z]\<\>/ ")  
BASEDIR := $(HOME)/ABS-$(VERSION)  
PDF\_OUTPUT := abs-$(VERSION).pdf  
NOCHUNKS\_OUTPUT := abs-$(VERSION).html  
CHUNK\_QUIET=0  
XSLROOTDIR=/usr/share/xml/docbook/stylesheet/nwalsh  
VPATH = $(BASEDIR)  
src = \*.xml \*.sh

all: html pdf

html: index.html  
index.html: $(src)  
[-d $(BASEDIR)] || mkdir $(BASEDIR)  
xsltproc --xinclude --nonet -stringparam profile.condition html   
-stringparam profile.attribute “standalone” -stringparam profile.value “no”   
-stringparam chunk.quietly $(CHUNK\_QUIET)   
-stringparam base.dir $(BASEDIR)/   
stylesheets/abs-chunked.xsl abs-book.xml

```
    [-d $(BASEDIR)/stylesheets] || mkdir $(BASEDIR)/stylesheets
    cp stylesheets/*.css $(BASEDIR)/stylesheets

    [-d $(BASEDIR)/images] || mkdir $(BASEDIR)/images
    cp images/*.png $(BASEDIR)/images
    cd $(BASEDIR)/; sed -i -e "s@../stylesheets@stylesheets@g" *.html
    cd $(BASEDIR)/; sed -i -e "s@../images@images@g" *.html

    for filename in `find $(BASEDIR) -name "*.html"`; do \
      tidy -config tidy.conf $$filename; \
      true; \
      sed -i -e "s@text/html@application/xhtml+xml@g" $$filename; \
    done;

```

pdf: $(PDF\_OUTPUT)  
$(PDF\_OUTPUT): $(src)  
[-d $(BASEDIR)] || mkdir $(BASEDIR)  
xsltproc --xinclude --nonet --stringparam profile.condition pdf   
–output $(BASEDIR)/abs-pdf.xml stylesheets/abs-profile.xsl abs-book.xml  
xsltproc --nonet --output $(BASEDIR)/abs-pdf.fo stylesheets/abs-pdf.xsl   
$(BASEDIR)/abs-pdf.xml  
sed -i -e “s/inherit/all/” $(BASEDIR)/abs-pdf.fo  
[fop.sh](http://fop.sh) $(BASEDIR)/abs-pdf.fo $(BASEDIR)/$(PDF\_OUTPUT)  
rm $(BASEDIR)/abs-pdf.xml $(BASEDIR)/abs-pdf.fo

nochunks: $(NOCHUNKS\_OUTPUT)  
$(NOCHUNKS\_OUTPUT): $(src)  
[-d $(BASEDIR)] || mkdir $(BASEDIR)  
xsltproc --xinclude --nonet -stringparam profile.condition html   
–output $(BASEDIR)/$(NOCHUNKS\_OUTPUT)   
stylesheets/abs-nochunks.xsl abs-book.xml

```
    tidy -config tidy.conf $(BASEDIR)/$(NOCHUNKS_OUTPUT) || true

    sed -i -e "s@text/html@application/xhtml+xml@g" \
      $(BASEDIR)/$(NOCHUNKS_OUTPUT)

```

validate:  
xmllint --noout --nonet --xinclude --postvalid abs-book.xml  
[/code]  
et qui lors d’un :

```auto

```

(comme indiqué [ici](http://abs.traduc.org/expliqgeneration.html)) me donne l’erreur suivante :

```auto

```

N’ayant aucune connaissance sur make, j’ai cherché un peu sur le Net [ici](http://gl.developpez.com/tutoriel/outil/makefile/), [là](http://www.gnu.org/software/make/manual/html_node/index.html) ou encore [là](http://www.commentcamarche.net/forum/affich-4579107-makefile), mais j’avoue ne pas y comprendre grand chose à ces histoires de tabulation ! (il semble pourtant y en avoir dans ce makefile, non ?)

➡ Je suis un newbie en Linux (et pas du tout programmeur) : je cherchais justement à apprendre le langage Bash grâce à ce guide…

Quelqu’un peut-il avoir la gentillesse de m’expliquer, svp, ou de me donner la solution afin que ce make fonctionne correctement ???  
Merci beaucoup d’avance !  
@+  
Eric.

---

<div class="post-metadata">

**Author:** ![fran.b](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/d78d45/32.png) [@fran.b](https://www.debian-fr.org/u/fran.b)\
**Post date:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/2 "2016-02-20T20:22:07Z")

</div>

Dans la ligne [quote] [-d $(BASEDIR)] || mkdir $(BASEDIR)  
[/quote]vérifie qui tu as bien un tab en début de ligne et non des blancs.

Par ailleurs l’option -p de mkdir devrait t’intéresser. Ce que tu as écrit est réalisé par

```auto

```

---

<div class="post-metadata">

**Author:** ![ignatioza](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/i/41988e/32.png) [@ignatioza](https://www.debian-fr.org/u/ignatioza)\
**Post date:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/3 "2016-02-20T20:22:07Z")

</div>

Et probablement toutes les autres lignes ont le meme problème.

---

<div class="post-metadata">

**Author:** ![Eric75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/eric75/32/4483_2.png) [@Eric75](https://www.debian-fr.org/u/Eric75)\
**Post date:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/4 "2016-02-20T20:22:08Z")

</div>

Whaouh !!!  
1/4h plus tard et j’ai la bonne réponse !!!

Merci les gars !  
C’est effectivemment (pour l’instant) un pb d’espace que j’ai cru être des TABs… (Je comprends un peu mieux les remarques du post au pb similaire)

@fran.b :  
Pour info, concernant l’option -p de mkdir, en fait j’ai recopié “bêtement” le makefile qui était mis à dispo sur leur site… (sans le comprendre 😊 )

Je vais, bien évidemment, essayer de “l’éplucher” un peu… et pour débuter, par exemple, j’ai voulu afficher à chaque fois les variables comme VERSION, en faisant un :

```auto

```

à la deuxième ligne mais il me fait une autre erreur :

```auto

```

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 20, 2016, 8:22 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/5 "2016-02-20T20:22:15Z")

</div>

Ben oui, c’est pas un script bash.

[quote] Un Makefile est un fichier constitué de plusieurs règles de la forme :

`cible: dependance
	commandes`  
[/quote]  
Ta commande (echo $VERSION) n’étant liée à aucune cible, elle ne sert à rien. make détecte alors une erreur, et refuse de s’exécuter…  
Si tu mets ta commande dans la cible index.html :

`index.html: $(src)
        echo $VERSION
        [-d $(BASEDIR)] || mkdir $(BASEDIR)
        ...`  
(avec une vraie tabulation, hein ? 😃 )  
tu verras alors s’afficher la version quand tu lanceras :

```auto

```

(ou make html : la règle html ne faisant rien d’autre que d’avoir index.html comme dépendance).

---

<div class="post-metadata">

**Author:** ![Eric75](https://www.debian-fr.org/user_avatar/www.debian-fr.org/eric75/32/4483_2.png) [@Eric75](https://www.debian-fr.org/u/Eric75)\
**Post date:** [Février 20, 2016, 8:23 UTC](https://www.debian-fr.org/t/erreur-dans-un-makefile/21032/6 "2016-02-20T20:23:57Z")

</div>

Super, merci beaucoup kna !

C’est un peu compliqué pour moi toutes ces notions (je débute) mais je pense avoir pigé !!!  
J’ai ajouté donc là où il fallait 😉 et avec les tabs qu’il fallait 😆 ça :

`@echo 'Version = ' $(VERSION)
mkdir -p $(BASEDIR)`  
Et maintenant j’ai bien mon N° de version qui s’affiche !!! (et le dir est bien créée de façon plus “propre” 😉 )

Sauf que maintenant, j’obtiens d’autre erreurs :

[code]$ make html  
Version = 6.0.21  
mkdir -p /home/int13h/ABS-6.0.21  
xsltproc --xinclude --nonet -stringparam profile.condition html   
-stringparam profile.attribute “standalone” -stringparam profile.value “no”   
-stringparam chunk.quietly 0   
-stringparam base.dir /home/int13h/ABS-6.0.21/   
stylesheets/abs-chunked.xsl abs-book.xml  
abs-part1.xml:13: parser error : Opening and ending tag mismatch: anchor line 13 and para  
  
^  
abs-part1.xml:30: parser error : Opening and ending tag mismatch: para line 13 and partintro  
  
^  
warning: failed to load external entity "[ex1a.sh](http://ex1a.sh)"  
abs-part1.xml:293: parser error : Failure to process entity ex1a  
&ex1a;  
^  
abs-part1.xml:293: parser error : Entity ‘ex1a’ not defined  
&ex1a;  
^  
abs-part1.xml:311: parser error : Opening and ending tag mismatch: anchor line 311 and para  
\* \* \*  
^  
abs-part1.xml:379: parser error : Opening and ending tag mismatch: anchor line 313 and para  
  
^  
abs-part1.xml:606: parser error : Opening and ending tag mismatch: para line 313 and chapter  
  
^  
abs-part1.xml:609: parser error : Opening and ending tag mismatch: para line 311 and part

Etc, etc…[/code]  
Et là, j’ai beau être un peu nullos sur les bords, je vois bien que le pb ne vient plus du makefile.  
Et dommage pour moi, je n’y connais strictement rien non-plus en xml… 😒

Tous ça, je vous le rappelle, pour apprendre à la base à parler Bash !!!

➡ Je clos donc ce post et ouvre [celui-ci](http://forum.debian-fr.org/viewtopic.php?f=9&t=21884) puisque le pb est différent…

Merci encore à vous tous pour votre aide !  
@+  
Eric
