• [^] # Re: ?

    Posté par . En réponse au message shell et make. Évalué à 1. Dernière modification le 04 octobre 2020 à 15:33.

    je fais une reponse de ce que j'ai trouvé dans la doc. ca me sera toujours utile pr un refresh si j'y reviens dans longtemps

    vocabulaire:
    cible: dependances
    regles

    @ sert à masquer les commandes effectuées par make dans le shell
    a noter que make --just-print affiche quand meme les commandes

    % équivaut à * : cela designe un ensemble de fichiers de facon generique
    si utilisé dans cible: on ne parle plus de regle explicite mais de regle implicite

    %: %.xml regle implicite
    @cp $< file.xml
    copie la 1ere dependance vers le fichier file.xml

    $< : Le nom de la premi`ere dependance. Si les commandes pour
    construire la cible proviennent d’une regle implicite, il s’agit de
    la premiere dependance introduite par la regle implicite.

    '-' en debut de ligne pr ignorer echec

    .PRECIOUS : pour ne pas faire le menage si interrompu en cours de make sur une cible

    PHONY:
    la doc de RMS: "A phony target is one that is not really the name of a file; rather it is just a name for a
    recipe to be executed when you make an explicit request. There are two reasons to use a
    phony target: to avoid a conflict with a file of the same name, and to improve performance.
    If you write a rule whose recipe will not create the target file, the recipe will be executed
    every time the target comes up for remaking."
    en gros utile si la cible n'est pas une fichier à creer

    .SECONDARY
    la doc de RMS: "The targets which .SECONDARY depends on are treated as intermediate files,
    except that they are never automatically deleted."
    en gros les cibles sont des fichiers intermediaires non supprimés

    qu'est ce qu'un bloc entre define endef?
    la doc de RMS : "When the same sequence of commands is useful in making various targets, you can define
    it as a canned sequence with the define directive, and refer to the canned sequence from
    the recipes for those targets. The canned sequence is actually a variable, so the name must
    not conflict with other variable names."
    en gros cest une variable qui peut definir une suite d'instructions à exécuter

    $@ Le nom de la cible de la règle. Si une règle implicite comporte
    plusieurs cibles, c’est la cible qui a déclenché la règle.

    $< Le nom de la première dépendance. Si les commandes pour
    construire la cible proviennent d’une règle implicite, il s’agit de
    la première dépendance introduite par la règle implicite.

    $? Les noms de toutes les dépendances qui sont plus récentes que la
    cible, séparés par des espaces.

    $^ Les noms de toutes les dépendances d’une cible, séparés par des
    espaces.

    $* Le radical associé à une règle implicite. Si la cible est toto.o
    et que la motif dans la règle est %.o, alors $* vaut toto. Cette
    variable est utile pour créer les noms de fichiers voisins.
    Dans le cas des règles explicites, il n’y a pas de motif. Le radical
    est souvent défini comme le nom de la cible sans suffixe. Il vau