2017-02-21 6 views
7

у меня есть файл main.cpp, который имеет только этот код:Как скрыть предупреждения в компиляции из внешних библиотек

#include <iostream> 
#include "include/rapi/RApi.h" 

using namespace std; 

int main() { 
    std::cout << "Test\n"; 
    return 0; 
} 

Когда я компилирую, я хочу видеть предупреждение из моего кода, но не от внешнего включен файлы. Я смог достичь этого в прошлом, но мне может быть что-то отсутствует в флагах компиляции, поскольку я продолжаю устранять ошибки из включенного заголовочного файла, когда я не хочу их видеть.

Это моя команда компиляции:

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

Я хочу видеть предупреждения и ошибки из main.cpp, но не из файлов в папке включают.

Я пробовал -isysteminclude-isysteminclude/rapi, передал -isystem до конца флагов, но безрезультатно.

Я что-то упустил?

+0

Вы пытались включить с помощью '<>' вместо этого? Они используются для заголовков системы. – emlai

+0

@tuple_cat вы не можете просто изменить это, насколько я знаю. <> Для заголовков системы, а не для файлов в той же папке, что и остальная часть проекта. – BlunT

+0

Почему ты не мог? Я имею в виду '#include '. Если я изменю это, чтобы использовать '' ', я получаю предупреждения от этого файла. Я никогда не слышал, чтобы у вас не было системных заголовков в той же папке, что и остальная часть проекта, и ничего не нашел в g ++ – emlai

ответ

4

Вам нужно добавить -isystem include в строке компиляции, то и в вашем использовании кода:

#include "rapi/RApi.h" 

(не include/rapi/RApi.h). Опция -isystem применяет атрибут «системный заголовок» к файлам, которые просматриваются с использованием этого пути поиска. Если вы поместите полный путь в #include, то GCC ищет путь напрямую и не использует путь -isystem, поэтому атрибут «системный заголовок» не применяется.

Относительно использования <> vs "", точная разница в поведении в основном определяется реализацией. Не нужно угадывать, просто посмотрите на различные вопросы и ответы, например this one.

+0

пятно на! Спасибо :) – BlunT

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

Я не говорю, что это не работает, но я предпочел бы иметь решение, которое не требует, чтобы я делал это взломать N файлов, где N - количество файлов, в которые включен заголовок оскорбителя. – BlunT

+1

как о создании собственного заголовка, который помещает туда директивы GCC, а затем включает в себя rapi – pm100

+3

BTW - ультра-неудобство для выполнения -wall -werror, истинные ниндзя делают это. -специальный, конечно, переместит вас в режим мега ниндзя – pm100

Смежные вопросы