Compilation du module noyau et KBUILD_NOPEDANTIC
J'ai remarqué que les noyaux récents (à partir de 2.16.24?) n'est pas comme si CFLAGS
est modifié dans le module extérieur Kbuild fichier. Si CFLAGS
est changé, vous serez délivré l'erreur suivante par le noyau de Linux Kbuild système:
scripts/Makefile.build:46: *** CFLAGS was changed in "/some/path". Fix it to use EXTRA_CFLAGS. Stop.
De ici:
Modules externes ont dans quelques cas de modification gcc avec l'option
en modifiant la variable CFLAGS. Cela n'a jamais été documentée et
était une mauvaise pratique.
Supplémentaires email
de la LKML.
Pourquoi est-ce une mauvaise idée? Ce qui est rationnel?
source d'informationauteur dimba
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, il pourrait être utile de mentionner que
EXTRA_CFLAGS
a été abandonné il y a longtemps et est remplacé parccflags-y
. Vous pouvez lire à ce sujet l'intention deccflags-y
dansDocumentation/kbuild/makefiles.txt
la section 3.7.Fondamentalement, cette variable vous permet d'ajouter des paramètres à l'ensemble de C indicateurs de compilation, dans le champ d'application du fichier où elle est affectée uniquement. Vous n'êtes pas censé changer les indicateurs globaux, parce que pourrait avoir un impact global au-delà de votre propre makefile, qui est considéré comme une mauvaise pratique. Le chèque que vous évoquez, vérifie qu'en effet, les indicateurs globaux n'a pas changée par inclus dans les makefiles.
Il est intéressant de vérifier comment
ccflags-y
anciennement connu sous leEXTRA_CFLAGS
finit par être utilisés dans le processus de construction. Tracer quelques points pertinents (mais pas tous, parce que c'est laissé comme exercice pour le lecteur 😉 ) affiche les éléments suivants:EXTRA_CFLAGS
peut toujours être utilisé, selonscripts/Makefile.lib
Le même fichier montre comment
ccflags-y
finit dans le C des indicateurs de compilation (et aussi vous indique que vous avez une autre variable à votre disposition, appeléCFLAGS_<filename>.o
):Puis dans
scripts/Makefile.build
la compilation règle est définie:Noter que ce sont tous de manière récursive l'extension de variables, à l'aide de
=
et pas:=
ce qui signifie que votre propre valeur deccflags-y
est insérée dans le C des drapeaux lorsque vous définissez dans votre makefile.Enfin sur
KBUILD_NOPEDANTIC
qui vous mentionner dans le titre mais pas dans le libellé de la question. Ce test de variation de la valeur desCFLAGS
peut être désactivée en donnantKBUILD_NOPEDANTIC
toute valeur -- voirscripts/Makefile.build
Les fichiers référencés dans cette réponse ont tous été récupérés aujourd'hui.
Maintenant... n'étant pas un expert dans ce domaine et en regardant de plus dans les makefiles après avoir écrit toute cette histoire, il y a une chose que je ne comprends pas non plus. Il me semble que
CFLAGS
n'est pas utilisé dans le système de build (pas implicitement, ni explicitement), maisKBUILD_CFLAGS
est. Donc je me demande si cette case pour que les modifications dansCFLAGS
devrait en fait être un chèque de changements dansKBUILD_CFLAGS
à la place.Linux makefiles construire
CFLAGS
dans une manière qui est appropriée pour le noyau.Primordial
CFLAGS
dire que vous ajouter un peu de drapeaux et peut supprimer des drapeaux. Certains enlevé les drapeaux peuvent être importantes pour la compilation correcte.