Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/11/2011, à 23:20

Spitfire 95

[Résolu] Problème de makefile

Bonjour,
Voici mon makefile :

all:
    gcc -Wall -O6 `pkg-config --cflags gtk+-3.0` -o "pendu" src/*.c  `pkg-config --libs gtk+-3.0`

install:
    # /
    mkdir -p "./debian/pendu"

    # /etc
    cp -p -r "./datas/etc/" "./debian/pendu/"

    # /usr
    cp -p -r "./datas/usr/" "./debian/pendu/"
    mkdir "./debian/pendu/usr/share/locale"
    mkdir "./debian/pendu/usr/bin"

    mv "./pendu" "./debian/pendu/usr/bin/"

    # Compiling translations
    for translation in "po/*.po"
    do
        mkdir -p "debian/pendu/usr/share/locale/$(basename $translation .${translation##*.})/LC_MESSAGES/"
        msgfmt "po/$(basename $translation)" -o "debian/pendu/usr/share/locale/$(basename $translation .${translation##*.})/LC_MESSAGES/pendu.mo"
    done

Le code qui bloque est la compilation des po en mo. J'ai une erreur /bin/sh: 1: Syntax error: end of file unexpected quoi que je fasse.
Les dernières lignes seules dans un .sh marchent pourtant.
Si quelqu'un pouvait me montrer mon erreur ce serait sympa smile
Merci d'avance.

Dernière modification par Spitfire 95 (Le 19/11/2011, à 14:41)


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#2 Le 18/11/2011, à 23:22

sputnick

Re : [Résolu] Problème de makefile

Verifie que tu a bien des tabs et pas des espaces pour indenter


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 18/11/2011, à 23:23

Spitfire 95

Re : [Résolu] Problème de makefile

J'ai regardé déjà trois fois sur deux IDE (Geany et Gedit) et à priori non...


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#4 Le 19/11/2011, à 10:53

pingouinux

Re : [Résolu] Problème de makefile

Bonjour,

Quelques remarques, même si ça ne résoud pas le problème :

Spitfire 95 a écrit :

mkdir "./debian/pendu/usr/share/locale"

Est-ce que les répertoires intermédiaires existent ? Sinon, il faut faire : mkdir -p ...

man msgfmt a écrit :

msgfmt [OPTION] filename.po ...

Les options semblent devoir être en tête, contrairement à :

msgfmt "po/$(basename $translation)" -o "debian/pendu/usr/share/locale/$(basename $translation .${translation##*.})/LC_MESSAGES/pendu.mo"

Hors ligne

#5 Le 19/11/2011, à 11:10

pingouinux

Re : [Résolu] Problème de makefile

Suite :

  1. Pour utiliser une variable dans un makefile : $$var, et non $var

  2. Les boucles doivent être sur une seule ligne (/bin/sh: 1: Syntax error: end of file unexpected vient de là) :

        for a in aa bb cc dd ;  \
        do   \
           echo $${a} ;  \
        done

Dernière modification par pingouinux (Le 19/11/2011, à 11:11)

Hors ligne

#6 Le 19/11/2011, à 13:55

Spitfire 95

Re : [Résolu] Problème de makefile

Merci pour cette réponse mais j'ai un autre problème maintenant :

all:
    gcc -Wall -O6 -o "pendu" src/*.c `pkg-config --libs gtk+-3.0 --cflags gtk+-3.0`

install:
    cp -p -r "./datas/" "./debian/pendu/"

    mkdir "./debian/pendu/usr/share/locale"
    mkdir "./debian/pendu/usr/bin"

    mv "./pendu" "./debian/pendu/usr/bin/"

    # Compiling translations
    for translation in "po/*.po"; \
    do \
        mkdir -p debian/pendu/usr/share/locale/$$(basename $${translation} .po)/LC_MESSAGES/ \
        msgfmt po/$$(basename $${translation}) -o debian/pendu/usr/share/locale/$$(basename $${translation} .po)/LC_MESSAGES/pendu.mo; \
    done
...
for translation in "po/*.po"; \
    do \
        mkdir -p debian/pendu/usr/share/locale/$(basename ${translation} .po)/LC_MESSAGES/ \
        msgfmt po/$(basename ${translation}) -o debian/pendu/usr/share/locale/$(basename ${translation} .po)/LC_MESSAGES/pendu.mo; \
    done
basename: extra operand `po/it.po'
Try `basename --help' for more information.
basename: extra operand `po/it.po'
Try `basename --help' for more information.
basename: extra operand `po/it.po'
Try `basename --help' for more information.
mkdir: invalid option -- 'o'
Try `mkdir --help' for more information.
make: *** [install] Error 1

Il ne me crée pas les dossiers debian/pendu/usr/share/locale/$$(basename $${translation} .po)/LC_MESSAGES/
Et il semblerai que la réponse soit toujours it.po au lieu de it.po es.po fr.po
Une idée ?


Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne

#7 Le 19/11/2011, à 14:12

pingouinux

Re : [Résolu] Problème de makefile

Il faut remplacer

for translation in "po/*.po"; \

par

for translation in po/*.po; \

À ta place, je simplifierai un peu :

    for translation in po/*.po; \
    do \
        bsn=$$(basename $${translation} .po); \
        mkdir -p debian/pendu/usr/share/locale/$$bsn/LC_MESSAGES/ \
        msgfmt -o debian/pendu/usr/share/locale/$$bsn/LC_MESSAGES/pendu.mo po/$$bsn.po; \
    done

Dernière modification par pingouinux (Le 19/11/2011, à 14:22)

Hors ligne

#8 Le 19/11/2011, à 14:40

Spitfire 95

Re : [Résolu] Problème de makefile

Ça fonctionne merci.

Code complet si ça peut aider quelqu'un :

all:
    gcc -Wall -O6 -o "pendu" src/*.c `pkg-config --libs gtk+-3.0 --cflags gtk+-3.0`

install:
    cp -p -r "./datas/" "./debian/pendu/"

    mkdir "./debian/pendu/usr/share/locale"
    mkdir "./debian/pendu/usr/bin"

    mv "./pendu" "./debian/pendu/usr/bin/"

    # Compiling translations
    for translation in po/*.po; \
    do \
        po=$$(basename $${translation} .po); \
        mkdir   -p debian/pendu/usr/share/locale/$$po/LC_MESSAGES; \
        msgfmt -o debian/pendu/usr/share/locale/$$po/LC_MESSAGES/pendu.mo po/$$po.po; \
    done

Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.

Hors ligne