Vermeiden Sie überflüssige Warnungen beim Kompilieren von Qt-Code mit ccache / clang

8

Ich habe das gleiche Problem wie dieser Typ . Kompilieren mit clang und ccache Ich erhalte diese Warnung jedes Mal, wenn sie auf ein Q_OBJECT trifft:

%Vor%

Dies passiert nur, wenn ccache verwendet wird, das Kompilieren des gleichen Codes mit clang alleine funktioniert gut.

Es scheint ein ähnliches Problem mit Makroerweiterungen zu geben Die vorgeschlagene Lösung besteht darin, die Umgebungsvariable

festzulegen %Vor%

Leider scheint dies mein Problem nicht zu beheben, oder vielleicht mache ich es falsch.

Ich habe es versucht:

  • Erstellen von der Befehlszeile mit

    • CCACHE_CPP2=yes ninja

    • export CCACHE_CPP2=yes ninja

  • Erstellen von Qt Creator, indem Sie CCACHE_CPP2 zu "Build Environment" hinzufügen

Gibt es noch etwas, das ich tun kann, um dieses Makro-Erweiterungsproblem zu beheben? Ich möchte Warnungen nicht global (weil das schlecht ist) oder lokal (weil das bedeutet, alle Makros in Compiler-spezifischen Boilerplate zu enthalten) deaktivieren.

    
ValarDohaeris 27.01.2015, 09:20
quelle

3 Antworten

3

Fügen Sie den CPP-Flags -Wo-self-assign hinzu. Es sollte Ihnen ermöglichen, Selbstzuweisungsfehler zu deaktivieren:

%Vor%

oder

%Vor%     
MichaelCMS 27.01.2015 12:16
quelle
3

Verzeihen Sie, dass ich nicht geklingelt habe, um das zu testen, aber ich fühlte, dass ich trotzdem helfen sollte. Wenn man Mareks Antwort erweitert, gibt es die Möglichkeit, das Pragma in eine andere Makroexpansion zu integrieren. Es ist eine sehr hässliche Lösung, aber auf diese Weise müssen Sie das Makro nur einmal definieren, anstatt über die gesamte Codebasis hinweg Pragmas zu erzeugen.

%Vor%

Wie Sie sehen können, habe ich es mit gcc getestet (ich habe momentan keine Möglichkeit, mit clang zu testen), aber das sollte gut funktionieren, wenn "GCC" durch "clang" innerhalb des Makros ersetzt wird (und -Wass_zuweisung verwendet wird) ). Anwenden auf dein Problem (Pseudocode):

%Vor%

Ein weiterer hässlicher Nachteil ist, dass ich, zumindest auf gcc, den Präprozessor zweimal laufen lassen musste, damit er funktionierte. Kann nicht sagen, ob das gleiche für den Klang notwendig ist.

    
Cássio Renan 04.02.2015 19:26
quelle
1

IMO ignoriert diese Warnung global ist kein Problem. Es warnt vor Dummy-Code und nicht vor möglichen logischen Fehlern, die durch Tippfehler verursacht werden. Deshalb habe ich @MichaelCMS Antwort gewählt.

Aber es gibt einen Weg nur die Warnung zu deaktivieren ist ein Teil des Codes :

%Vor%

Das sollte den Trick machen (wenn ich den Flaggennamen nicht vermasselt habe), aber ich mag es nicht, zu vielen Kesselplatten-Makros.

    
Marek R 03.02.2015 09:10
quelle

Tags und Links