Je suis en train d'utiliser GNU make pour compiler mon code C++, et j'aimerais comprendre comment rendre mes compilations personnalisables.
J'ai lu à différents endroits que CFLAGS
, CCFLAGS
et CXXFLAGS
sont utilisés à cet effet. Comment devrais-je les utiliser? Si j'ai des arguments supplémentaires à passer au compilateur en ligne de commande, dois-je les ajouter à CFLAGS
ou les préfixer? Y a-t-il une pratique commune?
Pourquoi les trois variables différentes? Je suppose que le compilateur C devrait recevoir CFLAGS
et CCFLAGS
, tandis que le compilateur C++ devrait recevoir CFLAGS
et CXXFLAGS
- est-ce correct?
L'utilisateur humain est-il censé définir ces variables? Est-ce que des outils automatiques (automake
, autoconf
, etc) les définissent? Le système Linux que je suis censé utiliser ne définit aucune de ces variables - est-ce typique?
Actuellement, mon Makefile ressemble à ceci, et je trouve que c'est un peu désordonné:
ifdef code_coverage
GCOV_FLAG := -fprofile-arcs -ftest-coverage
else
GCOV_FLAG :=
endif
WFLAGS := -Wall
INC_FLAGS := -Istuff -Imore_stuff -Ietc
CCFLAGSINT := -O3 $(WFLAGS) $(INC_FLAGS) $(CCFLAGS)
... (quelque part dans le makefile, la ligne de commande pour la compilation ressemble à ceci)
$(CC) $(CCFLAGSINT) -c $< -o $@
... (quelque part dans le makefile, la ligne de commande pour l'assemblage ressemble à ceci)
$(CC) $(GCOV_FLAG) $(CCFLAGSINT) $(OBJLIST) $(LDFLAGS) -o $@
Je suis assez sûr qu'il n'y a pas de bugs ici; le Makefile fonctionne très bien. Mais y a-t-il quelque chose qui va à l'encontre des conventions (comme CCFLAGSINT
- devrais-je juste écraser CCFLAGS
à la place? Ou CXXFLAGS
? FUD!)
Désolé pour tant de questions; vous n'allez évidemment pas y répondre toutes, mais j'espère que les réponses m'aideront à comprendre l'idée générale derrière ces paramétrages.