Parasoft-Logo Suche

Entdecken Sie das TÜV-zertifizierte GoogleTest mit Agentic AI für C/C++-Tests!
Details ansehen »

Parasoft-Blog

Verwenden des Parasoft C / C ++ - Tests mit CMake für die statische Analyse

Porträtfoto von Miroslaw Zielinski, Direktor Produktmanagement
By Miroslaw Zielinski • 10. April 2023 • 4 min gelesen
10. April 2023 | 4 min gelesen
By Miroslaw Zielinski

Möglicherweise haben Sie CMake in Ihrer statischen Analyse verwendet. Aber haben Sie versucht, den Parasoft C/C++-Test mit CMake zu verwenden? Hier ist eine Aufschlüsselung der Verwendung von C/C++test zum Ausführen einer statischen Analyse für CMake-basierte Projekte.

CMake ist eines der beliebtesten Werkzeuge zum Erstellen, Testen und Verpacken von Software. Parasoft C/C++test optimiert die Integration in CMake-basierte Projekte durch Vereinfachung des Build-Management- Prozesses. Je größer das Projekt, desto größer die Auswirkungen.

Das Parasoft-Team entwickelte diese Erweiterungen während eines Rollouts unserer Testlösung für einen großen, bekannten Automobilhersteller.

Unser Ziel war es, statische Analyse- und Unit-Testing-Funktionen in große und komplexe Projekte einzuführen, die auf der adaptiven AUTOSAR-Plattform basieren . Diese Projekte bestanden aus mehreren statischen und dynamischen Bibliotheken und zahlreichen ausführbaren Dateien.

In diesem Blogbeitrag erkläre ich, wie man die statischen Analysefunktionen von C/C++test in CMake-basierte Projekte integriert. Dasselbe gilt für Unit-Tests.

Integration der statischen Analyse in CMake-basierte Projekte

Um eine statische Codeanalyse durchzuführen, benötigen Tools wie C/C++test Informationen über den Projektbuild. Im Allgemeinen sind lediglich Kompilierungsbefehlszeilen erforderlich, um die für die Analyse vorgesehenen Dateien aufzurufen.

Bei C/C++test gibt es verschiedene Möglichkeiten zur Integration in den Build-Prozess. Unterschiedliche Build-Systeme erfordern möglicherweise unterschiedliche Ansätze. Bei CMake-basierten Projekten stehen großartige Optionen zur Verfügung, um statische Analysen mühelos durchzuführen und nur minimale Änderungen am Workflow zu erfordern. Es sorgt für eine reibungslose Integration mit C/C++test.

CMake-Skripte können einfach konfiguriert werden, um Informationen zur Kompilierzeit als JSON-Datei zu generieren. Normalerweise erhalten Sie eine JSON-Datei pro Build. Diese JSON-Datei enthält alles, was der statische Analysator zum Durchführen des Code-Scans benötigt. Die JSON-Datei mit Kompilierungsbefehlszeilen wird dann zum Zeitpunkt der Build-Skript-Generierung erstellt. C/C++test versteht dieses Format und kann es direkt als Eingabe für die Durchführung statischer Analysen verwenden.

Ausführen einer statischen Analyse für CMake-basierte Projekte

Das Verfahren zum Ausführen der statischen Analyse für CMake-basierte Projekte umfasst die folgenden Schritte:

  1. Aktivieren Sie die Generierung der JSON-Datei mit Kompilierungsbefehlen. Dies ist eine einmalige Aktivität.
  2. Generieren Sie Ihre Build-Skripte. Dies umfasst die Generierung von JSON-Dateien mit Kompilierungsinformationen.
  3. Führen Sie eine statische Analyse aus, indem Sie die Kompilierungsinformationen aus der JSON-Datei als Eingabe für den statischen Analysator eingeben.

Fertig! :)

Ein Beispiel für eine statische Analyse von CMake-basierten Projekten

Betrachten wir ein Beispiel für die statische Codeanalyse von CMake-basierten Projekten. Falls noch nicht geschehen, installieren Sie die Standard Edition von C++test.

Folge diesen Schritten

Wechseln Sie nach der Installation in das Installationsverzeichnis und in den Unterordner examples. Erstellen Sie eine Kopie des Timer-Beispiels und geben Sie das Timer-Verzeichnis ein. (Diese Schritte verwenden Linux als Entwicklungsplattform.)

Sie sollten den folgenden Inhalt sehen:

Codeausschnitt aus dem Beispielprojekt zur Integration statischer Analysefunktionen von C/C++test in CMake-basierte Projekte. Erstellen Sie eine Kopie des Timer-Beispiels und wechseln Sie in das Timer-Verzeichnis.

Dieses Beispiel ist für die Erstellung mit einem „statischen“ Makefile vorbereitet, das sich im Hauptverzeichnis befindet, oder für die Verwendung der von CMake generierten Build-Skripte.

Erstellen Sie einen Build-Ordner im Timer-Verzeichnis, indem Sie eine CD verwenden. Rufen Sie die Generierung der Build-Skripte mit CMake auf.

Screenshot der Befehlszeile, die die Generierung von Build-Skripten mit CMake aufruft.

Wenn wir den Inhalt des Build-Verzeichnisses nach der Generierung auflisten, sehen wir, dass die Datei compile_commands.json generiert wurde.

Für das nächste Beispielprojekt wurde die Generierung von JSON-Dateien mit Kompilierungsinformationen bereits aktiviert.

Codeausschnitt aus Beispielprojekt zur Integration statischer Analysefunktionen von C/C++test in CMake-basierte Projekte. Generierung von JSON-Dateien mit Kompilierungsinformationen.

Wir sind jetzt bereit, die statische Analyse mit der generierten Datei compile_commands.json auszuführen. Ein großer Vorteil ist, dass wir die .json-Datei direkt an die Befehlszeilenschnittstelle des Parasoft C / C ++ - Teststandardprodukts anhängen können:

Das ist es. Die statische Analyse wird durchgeführt und die Ergebnisse werden zurückgegeben.

Beispiele für Ergebnisse einer statischen Analyse beim Ausführen eines C/C++-Tests mit CMake-basierten Projekten

Dieser Integrationsansatz kann für Continuous Integration (CI) oder lokal auf dem Entwickler-Desktop verwendet werden. Die einzige möglicherweise erforderliche Änderung besteht darin, die Generierung der Datei „compile_command.json“ zu aktivieren.

So aktivieren Sie die Generierungsdatei in Ihrem Projekt

Wenn Sie die Generierung der Datei compile_command.json in Ihrem Projekt nicht aktiviert haben, können Sie dies auf zwei Arten tun.

Option 1

Setzen Sie die Optionen CMAKE_EXPORT_COMPILE_COMMANDS in der Datei CMakeLists.txt auf ON.

Beispiel

set (CMAKE_EXPORT_COMPILE_COMMANDS ON)

Option 2

Fügen Sie es dem Befehlszeilenaufruf des cmake hinzu, wenn Sie die Build-Skripte generieren.

Beispiel

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS = 1

Das ist alles, um die statische Analyse in CMake-basierte Projekte zu integrieren.

Erfahren Sie, wie Sie die statische Analyse in Ihre CMake-basierten Projekte integrieren.
Demo anfordern