Je passe généralement les définitions de macro de "make en ligne de commande" à un "makefile" en utilisant l'option: -Dname = value. La définition est accessible à l'intérieur du makefile.
Je passe également les définitions de macro du "makefile" au "code source" à l'aide de l'option de compilateur similaire: -Dname = value (prise en charge par de nombreux compilateurs). Cette définition est accessible dans le code source.
Ce dont j'ai besoin maintenant, c’est de permettre à l’utilisateur de mon makefile de pouvoir passer immédiatement des définitions de macro arbitraires de la "ligne de commande make.exe" au "code source", sans avoir à changer quoi que ce soit dans le makefile.
afin que l'utilisateur puisse taper: make -f mymakefile.mk -SOMEOPTION var = 5
alors directement le code main.c peut voir var:
int main()
{
int i = var;
}
Appelez la commande make
de cette façon:
make CFLAGS=-Dvar=42
Et assurez-vous d'utiliser $(CFLAGS)
dans votre commande de compilation dans le Makefile. Comme @ jørgensen l'a mentionné, placer l'affectation de variable après la commande make
écrasera la valeur CFLAGS
déjà définie dans le Makefile.
Vous pouvez également définir -Dvar=42
Dans une autre variable que CFLAGS
, puis réutiliser cette variable dans CFLAGS
pour éviter de remplacer complètement CFLAGS
.
Utilisez simplement une variable spécifique pour cela.
$ cat Makefile
all:
echo foo | gcc $(USER_DEFINES) -E -xc -
$ make USER_DEFINES="-Dfoo=one"
echo foo | gcc -Dfoo=one -E -xc -
...
one
$ make USER_DEFINES="-Dfoo=bar"
echo foo | gcc -Dfoo=bar -E -xc -
...
bar
$ make
echo foo | gcc -E -xc -
...
foo
Appelez make this façon
make CFLAGS=-Dvar=42
parce que vous voulez remplacer les CFLAGS de votre Makefile, et pas seulement l'environnement (qui a une priorité plus basse en ce qui concerne les variables Makefile).
En raison de la faible réputation, je ne peux pas commenter la réponse acceptée.
Je voudrais mentionner la variable prédéfinie CPPFLAGS
. Cela pourrait représenter un meilleur ajustement que CFLAGS
ou CXXFLAGS
, car il est décrit par le manuel de GNU Make comme suit:
Drapeaux supplémentaires à donner au préprocesseur C et aux programmes qui l’utilisent (compilateurs C et Fortran).
CPPFLAGS
n.o
Est créé automatiquement à partir de n.c
Avec une recette de la forme suivante: $(CC) $(CPPFLAGS) $(CFLAGS) -c
n.o
Est créé automatiquement à partir de n.cc
, n.cpp
Ou n.C
Avec une recette de la forme suivante: $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
On utiliserait la commande make CPPFLAGS=-Dvar=123
Pour définir la macro souhaitée.
$ cat x.mak tous: echo $ (OPTION) $ make -f x.mak 'OPTION = -DPASSTOC = 42' echo -DPASSTOC = 42 - DPASSTOC = 42