Makefile ou do-file ?

par Adrien Samson le 09 Apr 2015

Makefile

Les Makefile servent à configurer make qui est un outil de build de projet. Le principe est simple : pour construire une cible, on indique les dépendances et la commande pour la construire. make s’occupe de résoudre l’arbre de dépendance pour construire les cibles dans l’ordre.

helloworld: hello world
    cat hello world >helloworld
hello:
    echo Hello >hello
world:
    echo World >world

Mais surtout, make suveille la date de modification des fichiers, ainsi il ne reconstruira helloword que si hello ou world a été touché.

Utilisation détournée

On voit de plus en plus une utilisation détournée des Makefile pour lancer facilement des scripts :

install:
    composer install
    app/console cache:clear
    app/console assets:install

Ça fonctionne bien parce qu’il n’y a pas de fichier install qui est créé donc les commandes sont toujours relancées à chaque make install. Mais utiliser make juste pour lancer des scripts, ce n’est pas le plus adapté. Surtout qu’il faut mettre des tabulations et que ce n’est pas si simple avec un IDE configuré pour remplacer les tabulations par des espaces.

do-file

Finalement, pour lancer des scripts, quoi de mieux qu’un script ? Ce que j’appelle le do-file est tout simplement un script shell appelé do qui contient des fonctions.

#!/usr/bin/env sh

install () {
    composer install
    app/console cache:clear
    app/console assets:install
}

# lancer la commande en argument
$@

On lance donc la commande avec ./do install.

Et vu que c’est du shell, on peut commencer à faire des choses intéressantes :

#!/usr/bin/env sh

sf () {
    app/console $@
}

sfprod () {
    sf --env=prod $@
}

install () {
    composer install
    sf cache:clear
    sf assets:install
}

server () {
    sf server:run localhost:8080
}

if [ $# -eq 0 ]
then
    install
    exit
fi

$@

Voir sur GitHub Une remarque ?