uso que librerias lenguaje incluide hace funcion entorno directiva c++ c++11 makefile compilation

librerias - que hace#include en c++



Cómo ocultar advertencias en compilación de bibliotecas externas (2)

#include <iostream> #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wall" #include "include/rapi/RApi.h" #pragma GCC diagnostic pop int main() { std::cout << "Test/n"; return 0; }

Tengo un archivo main.cpp que solo tiene este código:

#include <iostream> #include "include/rapi/RApi.h" using namespace std; int main() { std::cout << "Test/n"; return 0; }

Cuando compilo, quiero ver advertencias de mi código, pero no de archivos externos incluidos. Pude lograr esto en el pasado, pero podría faltar algo aquí en los indicadores de compilación, ya que sigo viendo errores del archivo de encabezado incluido, cuando no quiero verlos.

Este es mi comando de compilación:

g++ -isystem include -pedantic -Wall -Wextra main.cpp -o main.o

Quiero ver advertencias y errores de main.cpp, pero no de archivos en la carpeta de inclusión.

He intentado -isysteminclude -isysteminclude/rapi , pasando el -isystem al final de las banderas, pero fue en vano.

¿Me estoy perdiendo de algo?


-isystem include agregar -isystem include a su línea de compilación, y TAMBIÉN en su código:

#include "rapi/RApi.h"

(no include/rapi/RApi.h ). La opción -isystem solo aplica el atributo "encabezado del sistema" a los archivos que se buscan utilizando esa ruta de búsqueda. Si coloca la ruta completa en #include entonces GCC busca directamente la ruta y no utiliza la ruta -isystem , por lo que el atributo "encabezado del sistema" no se aplica.

En cuanto al uso de <> vs "" , la diferencia exacta de comportamiento está esencialmente definida por la implementación. No hay necesidad de adivinar, solo mira varias preguntas y respuestas de SO, como esta .