Question

Je suis en train de compiler un module noyau Linux en utilisant 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

Ce qui me donne:

main.c:54: warning: ISO C90 forbids mixed declarations and code

Je dois passer à C99. Après avoir lu, j'ai remarqué que je dois ajouter un drapeau std = c99, pas sûr où il suppose à ajouter.

Comment puis-je modifier le Makefile pour compiler, selon C99?

Était-ce utile?

La solution

Il n'a rien à voir avec le makefile. ISO C90 des variables partout déclarant défend mais au début d'un bloc ou le fichier - comme celui-ci

int main(int argc, char **argv) {
   int a; /* Ok */
   int b = 3; /* Ok */

   printf("Hello, the magic number is %d!\n", b);
   int c = 42; /* ERROR! Can only declare variables in the beginning of the block */
   printf("I also like %d.. but not as much as %d!\n", c, b);

   return 0;
}

Ainsi, il doit être modifié à cette ...

int main(int argc, char **argv) {
   int a; /* Ok */
   int b = 3; /* Ok */
   int c = 42; /* Ok! */

   printf("Hello, the magic number is %d!\n", b);
   printf("I also like %d.. but not as much as %d!\n", c, b);

   return 0;
}

Vous ne pouvez "solution" que dans le code source, et non pas dans le makefile.

Cette règle a été assouplie dans C99, mais à mon avis, il est une bonne idée de séparer les définitions variables, déclarations et initialisations à partir du code en dessous:)

Donc, pour changer votre makefile pour faire compiler avec C99, vous devez modifier le Makefile dans le répertoire « build » que votre makefile fait référence, et ajoutez la ligne « std = c99 » au « gcc » compilation du fichier source.

Autres conseils

La bonne façon d'ajouter des drapeaux du compilateur lors de la compilation des modules est en réglant la variable ccflags-y. Comme ceci:

ccflags-y := -std=gnu99

Voir Documentation / kbuild / makefiles.txt dans l'arborescence du noyau pour plus d'informations.

Notez que j'utilise la norme gnu99 au lieu de c99 depuis le noyau Linux repose en grande partie sur les extensions GNU.

Vous pouvez simplement ajouter

CFLAGS=-std=c99

Vers le haut de votre makefile, ou vous pouvez faire le compatible avec le code C90 (comme le suggère Lüken.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top