Articles

Was ist in cmake ein „Projekt“?

Ein Projekt gruppiert logisch eine Reihe von Zielen (d. h. Bibliotheken, ausführbare Dateien und benutzerdefinierte Build-Schritte) in einer in sich geschlossenen Sammlung, die selbst erstellt werden kann.

In der Praxis bedeutet das, wenn Sie einen project Befehl in einem CMakeLists.txt , sollten Sie in der Lage sein, CMake aus dieser Datei auszuführen und der Generator sollte etwas erzeugen, das baubar ist. In den meisten Codebasen haben Sie nur ein einziges Projekt pro Build.

Beachten Sie jedoch, dass Sie mehrere Projekte verschachteln können. Ein Projekt der obersten Ebene kann ein Unterverzeichnis enthalten, das wiederum ein anderes in sich geschlossenes Projekt ist. In diesem Fall führt der Befehl project ein zusätzliches Scoping für bestimmte Werte ein. Beispielsweise zeigt die Variable PROJECT_BINARY_DIR immer auf das binäre Stammverzeichnis des aktuellen Projekts. Vergleichen Sie dies mit CMAKE_BINARY_DIR , das immer auf das Binärverzeichnis des Projekts der obersten Ebene verweist. Beachten Sie auch, dass bestimmte Generatoren zusätzliche Dateien für Projekte generieren können. Beispielsweise erstellen die Visual Studio-Generatoren für jedes Unterprojekt eine .sln -Lösungsdatei.

Verwenden Sie Unterprojekte, wenn Ihre Codebasis sehr komplex ist und Sie Benutzer benötigen, um bestimmte Komponenten isoliert erstellen zu können. Dies gibt Ihnen einen sehr leistungsfähigen Mechanismus zur Strukturierung des Build-Systems. Aufgrund des erhöhten Codierungs- und Wartungsaufwands, der erforderlich ist, um die verschiedenen Teilprojekte wirklich in sich geschlossen zu machen, würde ich empfehlen, diesen Weg nur zu gehen, wenn Sie einen echten Anwendungsfall dafür haben. Die Aufteilung der Codebasis in verschiedene Ziele sollte immer der bevorzugte Mechanismus für die Strukturierung des Builds sein, während Unterprojekte für die seltenen Fälle reserviert werden sollten, in denen Sie wirklich eine Teilmenge von Zielen in sich geschlossen machen müssen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.