linux - how - ¿Cómo usar make y compilar como C99?
makefile structure (3)
No tiene nada que ver con el archivo MAKE. ISO C90 prohíbe declarar variables en cualquier lugar, pero al principio de un bloque o del archivo, como este
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;
}
Por lo tanto, tiene que ser modificado a esto ...
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;
}
Solo puede "corregir" eso en el código fuente, no en el archivo MAKE.
Esta regla se ha relajado en C99, pero en mi opinión es una buena idea separar las definiciones de variables, declaraciones e inicializaciones del código que se encuentra debajo :)
Por lo tanto, para cambiar su archivo MAKE para que compile con C99, debe cambiar el Makefile en el directorio "compilación" al que hace referencia su archivo MAKE, y agregue el "-std = c99" en la línea "gcc" compilando el archivo fuente.
Estoy tratando de compilar un módulo de kernel de Linux usando un archivo 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
Lo que me da:
main.c:54: warning: ISO C90 forbids mixed declarations and code
Necesito cambiar a C99. Después de leer me di cuenta de que necesito agregar un indicador -std = c99, no estoy seguro de dónde se supone que debe agregarse.
¿Cómo cambio el Makefile para que se compile como C99?
Solo podrías agregar
CFLAGS=-std=c99
En la parte superior de tu makefile
, o puedes hacer que el código cumpla con C90 (como sugiere LukeN).
La forma correcta de agregar indicadores de compilación al compilar módulos es estableciendo la variable ccflags-y
. Me gusta esto:
ccflags-y := -std=gnu99
Consulte Documentation / kbuild / makefiles.txt en el árbol del kernel para obtener más información.
Tenga en cuenta que estoy usando el estándar gnu99
en lugar de c99
ya que el kernel de Linux depende en gran medida de las extensiones de GNU.