Вопрос

Я пытаюсь скомпилировать модуль ядра Linux с помощью 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

Что дает мне:

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

Мне нужно переключиться на C99.Прочитав, я заметил, что мне нужно добавить флаг -std=c99, но не уверен, куда его следует добавить.

Как изменить Makefile, чтобы он компилировался как C99?

Это было полезно?

Решение

Это не имеет ничего общего с помощью makefile. ISO C90 запрещает объявлять переменные где угодно, но в начале блока или файла - как это

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;
}

Таким образом, это должно быть изменено к этому ...

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;
}

Вы можете «исправить», что в исходном коде, а не в makefile.

Это правило было расслаблено в C99, но, на мой взгляд, это хорошая идея для разделения переменных определений, объявлений и инициализации из кода под ним :)

Итак, чтобы изменить свой MakeFile, чтобы сделать его компиляцией с C99, вам необходимо изменить Makefile в каталоге «build», который ссылается на Makefile, и добавьте «-Std = C99» в строке «GCC», составляющей исходный файл.

Другие советы

Правильный способ добавить флаги компилятора при компиляции модулей — установить ccflags-y переменная.Так:

ccflags-y := -std=gnu99

Видеть Документация/kbuild/makefiles.txt в дереве ядра для получения дополнительной информации.

Обратите внимание, что я использую gnu99 стандарт вместо c99 поскольку ядро ​​Linux в значительной степени зависит от расширений GNU.

Вы могли бы просто добавить

CFLAGS=-std=c99

На вершину вашего makefile, Или вы можете сделать код, совместимый с C90 (как предлагает Лукен.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top