it-swarm.com.de

Verwenden von CMake zum Generieren von Visual Studio C++ - Projektdateien

Ich arbeite an einem Open Source C++ - Projekt für Code, der unter Linux und Windows kompiliert wird. Ich benutze CMake, um den Code unter Linux zu erstellen. Zur Erleichterung des Entwicklungsaufbaus und aus politischen Gründen muss ich unter Windows auf Visual Studio-Projektdateien Editoren bleiben (ich kann beispielsweise nicht auf/- Code :: Blocks umschalten). Ich sehe Anweisungen zum Generieren von Visual Studio-Dateien mit CMake als hier .

Haben Sie bereits zuvor mit CMake Visual Studio-Dateien erstellt? Wie war deine Erfahrung? Angenommen, ich möchte meinem Projekt eine neue Datei hinzufügen. Was ist der Workflow dafür?

83
amit

CMake ist dafür ziemlich gut. Der Schlüsselteil war, dass jeder Windows-Benutzer daran denken muss, CMake auszuführen, bevor er in die Lösung geladen wird, und jeder Mac-Benutzer muss daran denken, ihn vor dem Erstellen auszuführen. 

Am schwierigsten war es als Windows-Entwickler, sicherzustellen, dass sich Ihre strukturellen Änderungen in der Datei cmakelist.txt und nicht in den Projektmappen oder Projektdateien befanden, da diese Änderungen wahrscheinlich verloren gehen würden Sie brauchten sie auch, und die Mac-Jungs mussten sich daran erinnern, die Make-Datei aus den gleichen Gründen nicht zu ändern.

Es erfordert nur ein wenig Nachdenken und Geduld, aber es wird zuerst Fehler geben. Wenn Sie jedoch Continuous Integration auf beiden Seiten verwenden, werden diese frühzeitig herausgerüttelt, und die Leute werden sich später daran gewöhnen.

53
Alex

Nicht sicher, ob es direkt mit der Frage zusammenhängt, aber ich habe nach einer Antwort gesucht, wie * .sln aus cmake-Projekten generiert wird. Ich habe entdeckt, dass man so etwas verwenden kann:

cmake -G "Visual Studio 10"

Das Beispiel generiert erforderliche VS 2010-Dateien aus einer Eingabedatei CMakeLists.txt

39
Ghita

Wir haben die Fertigungskette unserer Abteilung auf CMake umgestellt, und wir hatten einige interne Roadbumps, da andere Abteilungen unsere Projektdateien verwendeten und es gewohnt waren, sie einfach in ihre Lösungen zu importieren. Wir hatten auch einige Beschwerden darüber, dass CMake nicht vollständig in den Visual Studio-Projekt-/Lösungsmanager integriert wurde. Daher mussten Dateien manuell zu CMakeLists.txt hinzugefügt werden. Dies war ein großer Bruch im Workflow, an den die Leute gewöhnt waren.

Im Allgemeinen verlief der Übergang jedoch reibungslos. Wir sind sehr glücklich, da wir uns nicht mehr mit Projektdateien befassen müssen.

Der konkrete Arbeitsablauf zum Hinzufügen einer neuen Datei zu einem Projekt ist sehr einfach:

  1. Erstellen Sie die Datei und vergewissern Sie sich, dass sie sich am richtigen Ort befindet.
  2. Fügen Sie die Datei zu CMakeLists.txt hinzu.
  3. Bauen.

CMake 2.6 wird automatisch erneut ausgeführt, wenn sich CMakeLists.txt-Dateien geändert haben (und (halb-) automatisch die Projektmappe/Projekte neu lädt).

Denken Sie daran, dass Sie beim Erstellen von Out-of-Source-Builds die Quelldatei nicht im Build-Verzeichnis erstellen müssen (da Visual Studio nur das Build-Verzeichnis kennt).

25
JesperE

Wie Alex sagt, funktioniert es sehr gut. Der einzige knifflige Teil besteht darin, dass Sie daran denken, Änderungen an den cmake-Dateien vorzunehmen, anstatt von Visual Studio aus. Auf allen Plattformen ähnelt der Arbeitsablauf dem von alten Makefiles.

Aber es ist ziemlich einfach, damit zu arbeiten, und ich hatte keine Probleme damit, dass cmake ungültige Dateien oder ähnliches erzeugt.

9
jalf

CMake kann wirklich Nice Visual Studio .projs/.slns erzeugen, aber es besteht immer das Problem, dass die .cmake-Dateien anstelle von .proj/.sln geändert werden müssen. Wie es jetzt ist, haben wir es wie folgt zu tun:

  1. Alle Quelldateien werden an /src übergeben, und in Visual Studio sichtbare Dateien sind nur "Links" zu ihnen, die in .filter definiert sind.
  2. Der Programmierer fügt Dateien hinzu bzw. löscht Dateien, die daran denken, im definierten /src-Verzeichnis zu arbeiten, nicht im Standardverzeichnis des Projekts.
  3. Wenn er fertig ist, führt er ein Skript aus, das die entsprechenden .cmake-Dateien "aktualisiert".
  4. Er prüft, ob der Code in der neu erstellten Umgebung erstellt werden kann.
  5. Er gibt den Code ein.

Anfangs hatten wir ein bisschen Angst, wie es ausgehen wird, aber der Workflow funktioniert sehr gut und mit Nice diff vor jedem Commit kann jeder leicht sehen, ob seine Änderungen korrekt in .cmake-Dateien abgebildet wurden.

Eine weitere wichtige Sache, die Sie kennen sollten, ist die fehlende Unterstützung ( afaik ) für "Lösungskonfigurationen" in CMake. So wie es aussieht, muss man generieren zwei Verzeichnisse mit Projekten/Lösungen - eines für jeden Build-Typ (Debug, Release usw.). Es gibt keine direkte Unterstützung für komplexere Funktionen - mit anderen Worten: Durch das Wechseln zwischen Konfigurationen erhalten Sie nicht das, was Sie erwarten.

5
Red XIII

CMake produziert nahtlos Visual Studio-Projekte und -Lösungen. Sie können sogar Projekte/Lösungen für verschiedene Visual Studio-Versionen erstellen, ohne Änderungen an den CMake-Dateien vorzunehmen.

Das Hinzufügen und Entfernen von Quelldateien ist nur eine Frage des Modifizierens von CMakeLists.txt, der die Liste der Quelldateien enthält, und das Wiederherstellen der Projekte/Lösungen. Es gibt sogar eine Globbing-Funktion, um alle Quellen in einem Verzeichnis zu finden (obwohl es mit Vorsicht verwendet werden sollte).

Der folgende Link erklärt das Verhalten von CMake und Visual Studio sehr genau.

CMake und Visual Studio

4
ap-osd

Viele großartige Antworten, die jedoch möglicherweise durch diese CMake-Unterstützung in Visual Studio (5. Oktober 2016) ersetzt werden

0
S Meaden

Ich habe mein eigenes Projekt namens syncProj gestartet. Dokumentation/Download-Links von hier:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit#https://sourceforge.net/projects/syncproj/

Wenn Sie planen, Visual Studio für die Entwicklung zu verwenden, wird derzeit nur C++ unterstützt.

Der Hauptvorteil gegenüber anderen make-Systemen besteht darin, dass Sie Ihr Skript tatsächlich debuggen können, da es auf C # basiert.

Wenn Sie mit syncProj nicht vertraut sind, können Sie Ihre Lösung/Ihr Projekt einfach in das .cs-Skript konvertieren und von diesem Punkt an weiterentwickeln.

In cmake müssen Sie alles von Grund auf neu schreiben.

0
TarmoPikaro