GNU/Linux >> Tutoriales Linux >  >> Linux

Las 15 opciones de línea de comandos del compilador GCC más utilizadas

GCC Compiler es un compilador de C muy poderoso y popular para varias distribuciones de Linux. Este artículo explica algunas de las opciones populares del compilador GCC.

Un ejemplo de código C

El siguiente código C básico (main.c) se utilizará en este artículo:

#include<stdio.h>

int main(void)
{
   printf("\n The Geek Stuff\n");
   return 0;
}

Opciones del compilador GCC

1. Especifique el nombre del ejecutable de salida

En su forma más básica, el compilador gcc se puede usar como:

gcc main.c

El comando anterior ejecuta el proceso de compilación completo y genera un ejecutable con el nombre a.out.

Use la opción -o, como se muestra a continuación, para especificar el nombre del archivo de salida para el ejecutable.

gcc main.c -o main

El comando anterior produciría un archivo de salida con el nombre 'principal'.

Para comprender el proceso de compilación completo de un compilador GCC, lea nuestro artículo Viaje de un programa C a un ejecutable de Linux en 4 etapas.

2. Habilite todas las advertencias configuradas a través de la opción -Muro

Esta opción habilita todas las advertencias en GCC.

#include<stdio.h>

int main(void)
{
   int i;
   printf("\n The Geek Stuff [%d]\n", i);
   return 0;
}

Si se compila el código anterior, se produce la siguiente advertencia relacionada con la variable i no inicializada:

$ gcc -Wall main.c -o main
main.c: In function ‘main’:
main.c:6:10: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

3. Produce solo la salida del preprocesador con la opción -E

La salida de la etapa de preprocesamiento se puede generar usando la opción -E.

$ gcc -E main.c > main.i

El comando gcc produce la salida en stdout para que pueda redirigir la salida en cualquier archivo. En nuestro caso (arriba), el archivo main.i contendría la salida preprocesada.

4. Produce solo el código ensamblador usando la opción -S

La salida de nivel de ensamblaje se puede generar usando la opción -S.

gcc -S main.c > main.s

En este caso, el archivo main.s contendría la salida del ensamblado.

5. Produce solo el código compilado usando la opción -C

Para producir solo el código compilado (sin ningún enlace), use la opción -C.

gcc -C main.c

El comando anterior produciría un archivo main.o que contendría el código de nivel de máquina o el código compilado.

6. Produzca todos los archivos intermedios usando la función -save-temps

La opción -save-temps puede hacer todo el trabajo realizado en los ejemplos 4, 5 y 6 anteriores. A través de esta opción, la salida en todas las etapas de compilación se almacena en el directorio actual. Tenga en cuenta que esta opción también produce el ejecutable.

Por ejemplo:

$ gcc -save-temps main.c

$ ls
a.out  main.c  main.i  main.o  main.s

Entonces vemos que todos los archivos intermedios, así como el ejecutable final, se produjeron en la salida.

7. Enlace con bibliotecas compartidas usando la opción -l

La opción -l se puede utilizar para enlazar con bibliotecas compartidas. Por ejemplo:

gcc  -Wall main.c -o main -lCPPfile

El comando gcc mencionado anteriormente vincula el código main.c con la biblioteca compartida libCPPfile.so para producir el ejecutable final 'main'.

8. Cree un código independiente de la posición usando la opción -fPIC

Al crear las bibliotecas compartidas, se debe producir código independiente de la posición. Esto ayuda a que la biblioteca compartida se cargue como cualquier dirección en lugar de una dirección fija. Para esto se utiliza la opción -fPIC.

Por ejemplo, los siguientes comandos crean una biblioteca compartida libCfile.so desde el archivo fuente Cfile.c:

$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o

Entonces vemos que la opción -fPIC se usó en la creación de una biblioteca compartida.

9. Imprime todos los comandos ejecutados usando la opción -V

La opción -v se puede utilizar para proporcionar información detallada sobre todos los pasos que realiza gcc al compilar un archivo fuente.

Por ejemplo:

$ gcc -Wall -v main.c -o main
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
...
...
...

Entonces vemos que se produjo información detallada en la salida.

10. Habilite el soporte de programas ISO C89 usando la opción -ansi

A través de la opción -ansi se habilita el soporte para el estilo ISO C89.

Considere el siguiente código:

#include<stdio.h>

int main(void)
{
  // Print the string
   printf("\n The Geek Stuff\n");
   return 0;
}

Si el código anterior se compila con la opción -ansi, gcc generará un error porque los comentarios de C++ no están permitidos en el estilo ISO C89.

Aquí está la salida:

$ gcc -Wall -ansi main.c -o main
main.c: In function ‘main’:
main.c:5:3: error: expected expression before ‘/’ token

Entonces vemos que gcc arrojó un error relacionado con el estilo de comentario.

11. Interprete char como un char sin firmar usando la opción -funsigned-char

A través de esta opción, el tipo de char se trata como un tipo sin firmar.

Aquí hay un ejemplo:

#include<stdio.h>

int main(void)
{
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

Cuando el código anterior se compila con la opción funsigned-char, este es el resultado:

$ gcc -Wall -funsigned-char main.c -o main
$ ./main

 The Geek Stuff [246]

Entonces vemos que el char fue tratado como si no estuviera firmado.

12. Interprete char como char firmado usando la opción -fsigned-char

Esto es lo contrario de lo que discutimos en (12) arriba. Usando esta bandera, las variables char se tratan como si estuvieran firmadas.

Aquí hay un ejemplo:

$ gcc -Wall -fsigned-char main.c -o main
$ ./main

 The Geek Stuff [-10]

El resultado confirma que char se trató como firmado.

13. Use macros de tiempo de compilación usando la opción -D

La opción D del compilador se puede usar para definir macros de tiempo de compilación en el código.

Aquí hay un ejemplo:

#include<stdio.h>

int main(void)
{
#ifdef MY_MACRO
  printf("\n Macro defined \n");
#endif
  char c = -10;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

La opción del compilador -D se puede usar para definir la macro MY_MACRO desde la línea de comando.

$ gcc -Wall -DMY_MACRO main.c -o main
$ ./main

 Macro defined 

 The Geek Stuff [-10]

La impresión relacionada con la macro en la salida confirma que se definió la macro.

14. Convierta las advertencias en errores con la opción -Werror

A través de esta opción, cualquier advertencia que gcc pueda reportar se convierte en error.

Aquí hay un ejemplo:

#include<stdio.h>

int main(void)
{
  char c;
  // Print the string
   printf("\n The Geek Stuff [%d]\n", c);
   return 0;
}

La compilación del código anterior debería generar una advertencia relacionada con la variable indefinida c y esto debería convertirse en un error usando la opción -Werror.

$ gcc -Wall -Werror main.c -o main
main.c: In function ‘main’:
main.c:7:10: error: ‘c’ is used uninitialized in this function [-Werror=uninitialized]
cc1: all warnings being treated as errors

15. Proporcione opciones de gcc a través de un archivo usando la opción @

Las opciones de gcc también se pueden proporcionar a través de un archivo. Esto se puede hacer usando la opción @ seguida del nombre del archivo que contiene las opciones. Más de una opción está separada por un espacio en blanco.

Aquí hay un ejemplo:

$ cat opt_file 
-Wall -omain

El opt_file contiene las opciones.

Ahora compile el código proporcionando opt_file junto con la opción @.

$ gcc main.c @opt_file
main.c: In function ‘main’:
main.c:6:11: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]

$ ls main
main

El resultado confirma que el archivo opt_file se analizó para obtener las opciones y la compilación se realizó en consecuencia.


Linux
  1. Opciones de uso frecuente para el comando debian / ubuntu dpkg

  2. 40 comandos básicos de Linux utilizados con frecuencia

  3. Opciones útiles de ps

  4. Opciones del comando dpkg-reconfigure

  5. ¿Cómo veo cuáles son mis comandos de Linux más utilizados?

Opciones de línea de comando GCC poco comunes pero útiles

Cómo encontrar los comandos más utilizados en Linux

Comando Linux DF – Las 3 opciones más utilizadas

¿Opciones de línea de comandos de Thunar?

Comandos de Linux utilizados con frecuencia por los administradores de sistemas de Linux - Parte 4

Comandos de Linux utilizados con frecuencia por los administradores de sistemas de Linux - Parte 2