Macros MAKE

De RAD Studio
Aller à : navigation, rechercher

Remonter à MAKE.EXE


Une macro est une variable que MAKE traduit par une chaîne à chaque fois qu'il rencontre la macro dans un fichier make. Par exemple, vous pouvez définir une macro appelée LIBNAME, qui représente la chaîne mylib.lib. Pour cela, tapez la ligne LIBNAME = mylib.lib au début de votre fichier make. Puis, lorsque MAKE rencontre la macro $(LIBNAME), il substitue la chaîne mylib.lib. Les macros vous permettent de créer des fichiers make modèle que vous pouvez ensuite ajuster à vos besoins.

Pour utiliser une macro dans un fichier make, tapez $(MacroName), où MacroName est une macro définie. Vous pouvez utiliser des parenthèses ou accolades pour délimiter MacroName.

MAKE interprète les macros à différents moments suivant leur emplacement dans le fichier make :

  • Les macros imbriquées sont interprétées lorsque la macro de niveau le plus élevé est évoquée.
  • Les macros des règles et directives sont traduites lorsque MAKE regarde en premier dans le fichier make.
  • Les macros des commandes sont interprétées lorsque les commandes sont exécutées.

Si MAKE trouve une macro non définie dans un fichier make, il recherche une variable d'environnement du système d'exploitation portant le même nom (habituellement définie par SET) et utilise sa définition comme valeur. Par exemple, si vous écrivez $(PATH) dans un fichier make sans définir PATH, MAKE utilisera la valeur de PATH définie dans AUTOEXEC.BAT. Reportez-vous aux manuels de votre système d'exploitation pour savoir comment définir des variables d'environnement.

Syntaxe

<NomMacro> = <texte_expansion>
Elément Description
<NomMacro>

Est sensible à la casse (MACRO1 est différent de Macro1). Limité à 512 caractères.

<texte_expansion>

Est limité à 4 096 caractères. Le texte peut inclure les caractères alphanumériques, les signes de ponctuation et les espaces.


Vous devez définir chaque macro sur une ligne distincte dans le fichier make, et chaque définition de macro doit commencer sur le premier caractère de la ligne. Pour plus de lisibilité, les définitions de macro sont habituellement mises au début du fichier make. Si MAKE trouve plusieurs définitions de NomMacro, la nouvelle définition remplace la précédente.

Vous pouvez également définir une macro en utilisant l'option en ligne de commande -D. Aucun espace n'est admis avant ou après le signe égal =. Pourtant, vous pouvez définir plusieurs macros en séparant les définitions par des espaces. Les exemples suivants montrent des macros définies sur la ligne de commande :

make -Dsourcedir=c:\projecta
make -Dcommand="bcc32 -c"
make -Dcommand=bcc32 option=-c

Remarque : Les macros définies dans un fichier make remplacent les macros définies sur la ligne de commande.

Substitution de chaînes dans les macros de MAKE

MAKE vous permet de substituer temporairement des caractères dans une macro déjà définie. Par exemple, si vous définissez la macro suivante :

SOURCE = f1.cpp f2.cpp f3.cpp 

Vous pouvez substituer les caractères .cpp par .obj en utilisant la commande de MAKE suivante :

$(SOURCE:.cpp=.obj)

Cette substitution ne redéfinit pas la macro.

Voici les règles de substitution dans les macros :

  • Syntaxe : $(MacroName:original_text=new_text).
  • Ne placez pas d'espaces avant ou après les deux points.
  • Les caractères de texte_original doivent être absolument identiques, en terme de majuscules et de minuscules, à la définition de la macro.

MAKE vous permet également d'utiliser les macros au sein des macros de substitution. Par exemple :

MYEXT=.C
SOURCE=f1.cpp f2.cpp f3.cpp
$(SOURCE:.cpp=$(MYEXT)) #Changes 'f1.cpp' to 'f1.C', etc.

Le symbole ^ indique à MAKE d'interpréter littéralement le prochain caractère. Cela est utile pour l'insertion d'un caractère de nouvelle ligne. Par exemple :

MYEXT=.C
SOURCE=f1.cpp f2.cpp f3.cpp
($(SOURCE):.cpp=$(MYEXT)^
)       # changes 'f1.cpp f2.cpp f3.cpp' to:
        # f1.C
        # f2.C
        # f3.C

Le symbole ^ indique ici à MAKE de changer chaque occurrence de .cpp en .C suivi du caractère de nouvelle ligne.

Vous pouvez utiliser cela pour créer des règles explicites qui génèrent des fichiers de réponse pour TLIB.EXE. Par exemple :

myfile.lib: file1.obj file2.obj file3.obj
TLIB $@ @&&!
+-$(**: = &^
+-)
!

MAKE substitue ici tous les caractères espace de la liste de dépendance par un espace suivi d'un caractère &, du caractère de nouvelle ligne et de +-. Le fichier de réponse résultant devrait ressembler à :

+-file1.obj &
+-file2.obj &
+-file3.obj &
+-

Macros par défaut de MAKE

MAKE contient plusieurs macros par défaut que vous pouvez utiliser dans vos fichiers make. Le tableau suivant donne la liste de leur définition et leur interprétation dans les règles explicites et implicites :

Macro Interprétation implicite Interprétation explicite
$*
chemin\fichier dépendant
chemin\fichier cible
$<
chemin\fichier dépendant+ext
chemin\fichier cible+ext
$:
chemin des dépendants
chemin de la cible
$.
fichier dépendant+ext
fichier cible + ext
$&
fichier dépendant
fichier cible
$**
chemin\fichier dépendant+ext
tous les fichiers dépendants+ext
$?
chemin\fichier dépendant+ext
anciens dépendants


Macro Interprétation Commentaire
_ _MSDOS_ _

1

Si DOS actif

_ _MAKE_ _

0x0370

Version de MAKE en hexadécimal

MAKE

make

Nom du fichier exécutable MAKE

MAKEFLAGS

options

Les options tapées sur la ligne de commande

MAKEDIR

répertoire

Répertoire de MAKE.EXE

Modification des macros de MAKE par défaut

Si les macros par défaut ne donnent pas exactement la chaîne que vous voulez, les modificateurs de macro vous permettent d'extraire des parties de la chaîne pour correspondre à votre besoin. Les modificateurs de macro sont habituellement utilisés avec $< ou $@.

Pour modifier une macro par défaut, utilisez cette syntaxe :

$(NomMacro [modificateur])

Le tableau suivant donne la liste des modificateurs de macro, ainsi que des exemples d'utilisation :

Modificateur Partie du nom de fichier développé Exemple Résultat
D

Lecteur et répertoire

$(<D)
C:\PROJECTA\
F

Base et extension

$(<F)
MYSOURCE.C
B

Base uniquement

$(<B)
MYSOURCE
R

Lecteur, répertoire et base

$(<R)
C:\PROJA\SOURCE

Voir aussi