Je passe généralement des définitions de macro de "make command line" à un "makefile" en utilisant l'option: -Dname = value. La définition est accessible dans le makefile.
Je passe également des définitions de macro du "makefile" au "code source" en utilisant l'option de compilation similaire: -Dname = valeur (prise en charge dans 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 des définitions de macro arbitraires de la ligne de commande "make.exe" au "code source" tout de suite, sans avoir à changer quoi que ce soit dans le makefile.
donc l'utilisateur peut taper: make -f mymakefile.mk -SOMEOPTION var = 5
puis directement le code main.c peut voir var:
int main()
{
int i = var;
}
Réponses:
Appelez la
make
commande de cette façon:Et assurez-vous d'utiliser
$(CFLAGS)
dans votre commande compile dans le Makefile. Comme @ jørgensen l'a mentionné, placer l'affectation de variable après lamake
commande remplacera laCFLAGS
valeur déjà définie dans le Makefile.Vous pouvez également définir
-Dvar=42
une autre variable queCFLAGS
, puis réutiliser cette variableCFLAGS
pour éviter de la remplacer complètementCFLAGS
.la source
$(CFLAGS)
doit venir en dernier, de sorte que toutes les options spécifiées par un utilisateur remplacent tout ce que le Makefile définit en interne. Cela signifierait utiliser par exemplelocal_CFLAGS = -Wall $(CFLAGS)
. Inversement, s'il y a quelque chose que vous voulez vraiment avoir la priorité, mettez-le après$(CFLAGS)
, comme dans le commentaire @MadScientist.CFLAGS="-Dvar1=42 -Dvar2=314"
CPPFLAGS
pourrait représenter un meilleur ajustement queCFLAGS
ouCXXFLAGS
: stackoverflow.com/a/53527858/2278206Utilisez simplement une variable spécifique pour cela.
la source
Appelez - faire de cette façon
parce que vous voulez remplacer les CFLAGS de votre Makefile, et pas seulement l'environnement (qui a une priorité inférieure en ce qui concerne les variables Makefile).
la source
En raison de ma 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 queCFLAGS
ouCXXFLAGS
, car il est décrit par le manuel GNU Make comme:Exemples de règles implicites intégrées qui utilisent
CPPFLAGS
n.o
se fait automatiquement à partirn.c
d'une recette de la forme:$(CC) $(CPPFLAGS) $(CFLAGS) -c
n.o
se fait automatiquement à partir den.cc
,n.cpp
oun.C
avec une recette de la forme:$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c
On utiliserait la commande
make CPPFLAGS=-Dvar=123
pour définir la macro souhaitée.Plus d'informations
la source
la source
Trouvez le fichier C et l'implémentation Makefile ci-dessous pour répondre à vos besoins
toto.c
Makefile
la source