OVH Cloud OVH Cloud

Makefile

8 réponses
Avatar
Rakotomandimby (R12y) Mihamina
Bonjour

J'ai un repertoire dans lequel sont des fichiers dont le nom est

toto.ml
titi.ml
tata.ml

Et il y en a plein d'autre en prevision.
Quand je les compile, je fais

ocamlc -o toto toto.ml
ocamlc -o titi titi.ml
ocamlc -o tata tata.ml

Maintenant comme je sais qu'il va y avoir de plus en plus de fichiers a
compiler au fur et a mesure que le projet avance, je me dis que c'est pas
une mauvaise idee de faire un Makefile. Le but en utilisant le Makefile
n'est pas tant de faciliter la repetition de compilation ( pour ca,
l'historique du shel me suffit largement), mais en prevision des fichiers
qui vont venir.

Je voudrais que chaque fichier qui se fait compiler produise un executable
fait du "basename" du fichier source.

Ainsi, si demain j'ajoute

foo.ml
bar.ml
qux.ml

Il me faudrait 'foo', 'bar' et 'qux' executables. Mais sans que j'ai
eu besoin de modifier le Makefile. Il faut que le Makefile ait pris en
compte la presence des nouveaux fichiers et ait generé les executables
qu'il faut. Le probleme est que je ne sais pas recuperer le basename du
fichier source dans un Makefile. Pour compiler dans ce repertoire, j'ai eu
a dealer avec un affreux script du genre:

#########################################
#!/bin/zsh

C=/usr/bin/ocamlc

# Il y aura d'autres options plus tard
OPTS=" -o"
MODULES=""
for SOURCE in *.ml ;
{
BASENAME=`print $SOURCE | awk 'BEGIN{FS="."}{print $1}'`
$C $OPTS $BASENAME SOURCE
}
#########################################

Ah oui. Je n'ai pas reussi a utiliser 'basename' dans le script: Il me
retourne quand meme le nom de fichier avec l'extension alors je l'ai
zappé.

Avec ca, je prends en compte en un tour de main tout nouveau fichier.
Oui mais ce n'est pas un Makefile... Peut-etre que le Makefile n'est pas
ce qui me convient? J'ai un bouquin sur le Makefile sous les yeux que j'ai
commencé a lire aujourd'hui, il n'y a pas ce que je cherche...

Merci d'avance.


--
Mirroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

8 réponses

Avatar
Thomas Nemeth
Le sam 14 mai 2005 à 01:57, Rakotomandimby (R12y) Mihamina a tapoté :
| Bonjour

Bonjour,


| #########################################
| #!/bin/zsh
|
| C=/usr/bin/ocamlc
|
| # Il y aura d'autres options plus tard
| OPTS=" -o"
| MODULES=""
| for SOURCE in *.ml ;
| {
| BASENAME=`print $SOURCE | awk 'BEGIN{FS="."}{print $1}'`
| $C $OPTS $BASENAME SOURCE
| }
| #########################################
|
| Ah oui. Je n'ai pas reussi a utiliser 'basename' dans le script: Il me
| retourne quand meme le nom de fichier avec l'extension alors je l'ai
| zappé.

avec BASENAME=`basename $SOURCE .ml` ?


| Avec ca, je prends en compte en un tour de main tout nouveau fichier.
| Oui mais ce n'est pas un Makefile... Peut-etre que le Makefile n'est pas
| ce qui me convient?

Ce n'est pas nécessaire dans ton cas.


| J'ai un bouquin sur le Makefile sous les yeux que j'ai
| commencé a lire aujourd'hui, il n'y a pas ce que je cherche...

Recherche un document nommé technique de production de
programmes en pdf (ou tpp.ps) créé par Matthieu Herrb.
Il t'expliquera les bases pour se créer un makefile tout
simple.


| Merci d'avance.

'plaisir.


Thomas
--
BF>la question qui fâche, c'est le montage vidéo sous Linusque.
man mount.
-+- VB in GFA: Sexe, montage et vidéo. -+-
Avatar
Stephane Chazelas
2005-05-14, 01:57(+02), Rakotomandimby (R12y) Mihamina:
Bonjour

J'ai un repertoire dans lequel sont des fichiers dont le nom est

toto.ml
titi.ml
tata.ml

Et il y en a plein d'autre en prevision.
Quand je les compile, je fais

ocamlc -o toto toto.ml
ocamlc -o titi titi.ml
ocamlc -o tata tata.ml
[...]


for f (t?t?.ml) ocamlc -o $f:r $f

--
Stéphane

Avatar
Rakotomandimby (R12y) Mihamina
( Sat, 14 May 2005 11:23:55 +0100 ) Stephane Chazelas :

$f:r


Magic ZSH...

--
Mirroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)

Avatar
Christophe PEREZ
Le Sat, 14 May 2005 08:17:35 +0000, Thomas Nemeth a écrit:

Recherche un document nommé technique de production de
programmes en pdf (ou tpp.ps) créé par Matthieu Herrb.


Comme j'ai mis un moment à le trouver (à cause du pluriel sur
technique) :
http://www.laas.fr/~matthieu/cours/make/

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
Rakotomandimby (R12y) Mihamina
( Sat, 14 May 2005 13:49:19 +0200 ) Rakotomandimby (R12y) Mihamina :
( Sat, 14 May 2005 11:23:55 +0100 ) Stephane Chazelas :
$f:r
Magic ZSH...




Et je me permet de fournir ici un lien qui pourrait aider les futurs
adeptes de ZSH qui donne la liste des "Mofifiers" et leurs actions:

http://asis.web.cern.ch/asis/products/MISC/zsh-2.6.beta4/zsh_7.html#SEC23


--
Mirroir de logiciels libres http://www.etud-orleans.fr
Développement de logiciels libres http://aspo.rktmb.org/activites/developpement
Infogerance de serveur dédié http://aspo.rktmb.org/activites/infogerance
(En louant les services de l'ASPO vous luttez contre la fracture numerique)


Avatar
Stephane Chazelas
2005-05-14, 13:49(+02), Rakotomandimby (R12y) Mihamina:
( Sat, 14 May 2005 11:23:55 +0100 ) Stephane Chazelas :

$f:r


Magic ZSH...


En l'occurrence, c'est copié de tcsh.

Les shells POSIX (et zsh) ont:

${f%.*}

Note que $f:h (t comme head) est preferable a ${f%/*} car il
marche aussi quand $f ne contient pas de "/" (retourne ".") et
est preferable a "$(dirname -- "$f")" a cause du bug de la
command substitution qui enleve tous les newlines en fin.

--
Stéphane


Avatar
Stephane Chazelas
2005-05-14, 19:41(+02), Rakotomandimby (R12y) Mihamina:
( Sat, 14 May 2005 13:49:19 +0200 ) Rakotomandimby (R12y) Mihamina :
( Sat, 14 May 2005 11:23:55 +0100 ) Stephane Chazelas :
$f:r
Magic ZSH...




Et je me permet de fournir ici un lien qui pourrait aider les futurs
adeptes de ZSH qui donne la liste des "Mofifiers" et leurs actions:

http://asis.web.cern.ch/asis/products/MISC/zsh-2.6.beta4/zsh_7.html#SEC23
[...]


2.6, ca va commencer a etre difficile a trouver.

Va plutot a la source:

http://zsh.sunsite.dk/Doc/Release/zsh_13.html#SEC52

Mais plutot utiliser une interface "info" qu'html:

info -f zsh -n Modifiers

--
Stéphane



Avatar
Laurent Wacrenier
Rakotomandimby (R12y) Mihamina écrit:
Je voudrais que chaque fichier qui se fait compiler produise un executable
fait du "basename" du fichier source.


Il suffit de faire un Makefile

----
.SUFFIXES: .ml

.ml:
ocamlc -o $@ $<
# ^^^^^ tabulation
----



Ainsi, si demain j'ajoute

foo.ml
bar.ml
qux.ml


$ make foo bar qux