2017-02-21 2 views
7

ich eine main.cpp Datei Warnungen in Kompilation verstecken, die diesen Code nur hat:Wie aus externen Bibliotheken

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

using namespace std; 

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

Wenn ich kompilieren, ich möchte sehen, Warnungen von meinem Code, aber nicht von extern Dateien. Ich konnte das in der Vergangenheit erreichen, aber vielleicht fehlt mir hier etwas in den Kompilierungsflags, da ich weiterhin Fehler aus der enthaltenen Header-Datei sehe, wenn ich sie nicht sehen will.

Das ist mein Kompilierungsbefehl:

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

Ich möchte Warnungen und Fehler von main.cpp sehen, aber nicht von Dateien im Ordner enthalten.

Ich habe versucht -isysteminclude-isysteminclude/rapi, die -isystem bis zum Ende der Fahnen, aber ohne Erfolg übergeben.

Fehle ich hier etwas?

+0

Haben Sie versucht, stattdessen mit '<>' einzuschließen? Diese werden für Systemheader verwendet. – emlai

+0

@tuple_cat du kannst das nicht ändern, soweit ich weiß. <> Ist für Systemheader, nicht für Dateien im selben Ordner wie der Rest des Projekts. – BlunT

+0

Warum konntest du nicht? Ich meine '#include '. Wenn ich das ändere, um '' 'zu verwenden, erhalte ich Warnungen von dieser Datei. Ich habe nie gehört, dass Sie keine System-Header im selben Ordner wie der Rest des Projekts haben könnten, und nichts in g ++ gefunden – emlai

Antwort

4

Sie müssen -isystem include auf Ihre Kompilierung Zeile hinzufügen, dann ist auch in Ihrem Code verwenden:

#include "rapi/RApi.h" 

(nicht include/rapi/RApi.h). Die Option -isystem wendet das Attribut "system header" nur auf Dateien an, die über diesen Suchpfad nachgeschlagen werden. Wenn Sie den vollständigen Pfad in #include eingeben, dann sucht GCC den Pfad direkt und verwendet nicht den Pfad -isystem, so dass das Attribut "system header" nicht angewendet wird.

In Bezug auf die Verwendung <> vs "", ist der genaue Unterschied im Verhalten im Wesentlichen Implementierung definiert. Sie müssen nicht raten, schauen Sie sich einfach verschiedene SO-Fragen und Antworten an, z. B. this one.

+0

Spot auf! Danke :) – 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

Ich sage nicht, dass dies nicht funktioniert, aber ich würde lieber eine Lösung haben, die mich nicht dazu verpflichtet, diesen Hack auf N-Dateien zu machen, wobei N die Anzahl der Dateien ist, in denen der störende Header enthalten ist. – BlunT

+1

Wie wäre es mit der Erstellung Ihrer eigenen Header, die die GCC-Richtlinien in dort und dann enthält rapi – pm100

+3

BTW - ultra-Kudos für die tun-wall-Fehler, wahre Ninjas tun, dass. -pedantic würde dich natürlich in den Mega-Ninja-Modus bewegen – pm100

Verwandte Themen