Comment utiliser faire et de le compiler en tant que C99?
Je suis en train de compiler un module du noyau linux à l'aide d'un Makefile:
obj-m += main.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Qui me donne:
main.c:54: warning: ISO C90 forbids mixed declarations and code
J'ai besoin de passer à la C99. Après lecture, j'ai remarqué que j'ai besoin d'ajouter un drapeau-std=c99, vous ne savez pas où il suppose être ajouté.
Comment puis-je modifier le fichier Makefile afin de compiler comme C99?
Je pensais que le C99 est un exploit script PHP hehe
OriginalL'auteur djTeller | 2010-05-29
Vous devez vous connecter pour publier un commentaire.
Il n'a rien à voir avec le makefile. ISO C90 interdit de déclarer des variables n'importe où, mais dans le début d'un bloc ou le fichier comme ceci
Donc il doit être modifié pour cette...
Vous ne peut "fixer" dans le code source, pas dans le fichier makefile.
Cette règle a été assouplie en C99, mais à mon avis c'est une bonne idée de séparer les définitions de variables, déclarations et initialisations du code ci-dessous 🙂
Donc pour modifier votre fichier makefile pour qu'elle compile avec C99, vous devez modifier le fichier Makefile dans le "build" répertoire que votre fichier makefile est de référencement, et d'ajouter l'option "-std=c99" à la "gcc" ligne de la compilation du fichier source.
Après avoir vécu dans le OO (Java) dans le monde pendant une longue période, et, récemment, à retrouver à l'aide de C sur une base quotidienne je suis en désaccord avec le point de l'idée de la séparation des informations variables. Garder les choses dans un aussi petit possible, semble de plus en plus important. Certaines variables ne seront nécessaire à l'intérieur d'une boucle while ou for par exemple.
Vous pouvez utiliser accolade {} la portée dans ce cas. LukeN est correct comme dans ce qui serait accepté par le noyau principal de la ligne. Si c'est une bonne chose tout autour, je ne vous en dis pas et je suppose que ce n'est pas ce que l'OP a demandé.
OriginalL'auteur LukeN
La bonne façon d'ajouter des drapeaux de compilation lors de la compilation de modules est par la définition de la
ccflags-y
variable. Comme ceci:Voir Documentation/kbuild/makefiles.txt dans l'arborescence du noyau pour plus d'informations.
Remarque que je suis en utilisant le
gnu99
norme au lieu de lac99
depuis le noyau Linux s'appuie fortement sur GNU extensions.peut-être que this aide
OriginalL'auteur Job
Vous pouvez simplement ajouter
Vers le haut de votre
makefile
, ou vous pouvez faire le code compatible avec C90 (comme LukeN suggère.)OriginalL'auteur ocodo