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. Aus Gründen der Vereinfachung der Entwicklung und aus politischen Gründen muss ich mich unter Windows an Visual Studio-Projektdateien / -Editor halten (ich kann beispielsweise nicht zu Code :: Blocks wechseln ). Ich sehe Anweisungen zum Generieren von Visual Studio-Dateien mit CMake wie hier .
Haben Sie CMake bereits zum Generieren von Visual Studio-Dateien verwendet? Wie war deine Erfahrung? Angenommen, ich möchte meinem Projekt eine neue Datei hinzufügen. Was ist der Workflow dafür?
Antworten:
CMake ist dafür eigentlich ziemlich gut. Der Schlüssel war, dass jeder auf der Windows-Seite daran denken muss, CMake auszuführen, bevor er in die Lösung geladen wird, und jeder auf unserer Mac-Seite muss daran denken, es vor dem Erstellen auszuführen.
Das Schwierigste war, als Windows-Entwickler sicherzustellen, dass Ihre strukturellen Änderungen in der Datei cmakelist.txt und nicht in den Lösungs- oder Projektdateien enthalten sind, da diese Änderungen wahrscheinlich verloren gehen und selbst wenn sie nicht verloren gehen, nicht auf die Mac-Seite übertragen werden brauchte sie auch, und die Mac-Leute müssten daran denken, 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 auf beiden Seiten eine kontinuierliche Integration verwenden, werden diese frühzeitig ausgeschüttelt, und die Menschen werden sich schließlich daran gewöhnen.
quelle
C:\...> MSBuild ALL_BUILD.vcxproj
cmake --build .
.cmake --build . --config Debug -- /nologo /verbosity:minimal /m
. Ich werde nach einfügen.
target run_tests
, um meinen Googletest-Unit-Test auszuführen, und "Debug" kann durch "Release" ersetzt werden. (Das Hinzufügen der Konfigurationsoption für Debug ist optional, da dies die Standardeinstellung ist, aber ich habe sieIch bin mir nicht sicher, ob es in direktem Zusammenhang mit der Frage steht, aber ich habe nach einer Antwort gesucht, wie * .sln aus cmake-Projekten generiert werden kann. Ich habe festgestellt, dass man so etwas verwenden kann:
Das Beispiel generiert die erforderlichen VS 2010-Dateien aus einer CMakeLists.txt-Eingabedatei
quelle
cmake
.Wir haben die Build-Kette unserer Abteilung auf CMake verlagert und hatten einige interne Probleme, da andere Abteilungen unsere Projektdateien verwendeten und es gewohnt waren, sie nur 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, sodass Dateien manuell zu CMakeLists.txt hinzugefügt werden mussten. Dies war eine große Unterbrechung des Workflows, an den die Leute gewöhnt waren.
Aber im Allgemeinen war es ein ziemlich reibungsloser Übergang. Wir freuen uns sehr, dass wir uns nicht mehr mit Projektdateien befassen müssen.
Der konkrete Workflow zum Hinzufügen einer neuen Datei zu einem Projekt ist wirklich einfach:
CMake 2.6 führt sich automatisch erneut aus, wenn sich CMakeLists.txt-Dateien geändert haben (und die Lösung / Projekte (halb-) automatisch neu lädt).
Denken Sie daran, dass Sie bei Builds außerhalb der Quelle darauf achten müssen, die Quelldatei nicht im Build-Verzeichnis zu erstellen (da Visual Studio nur das Build-Verzeichnis kennt).
quelle
Wie Alex sagt, funktioniert es sehr gut. Der einzige schwierige Teil besteht darin, sich daran zu erinnern, Änderungen an den cmake-Dateien vorzunehmen, anstatt in Visual Studio. Auf allen Plattformen ähnelt der Workflow dem von einfachen alten Makefiles.
Aber es ist ziemlich einfach, damit zu arbeiten, und ich hatte keine Probleme damit, dass cmake ungültige Dateien oder ähnliches generiert, sodass ich mir keine Sorgen machen würde.
quelle
CMake erstellt Visual Studio-Projekte und -Lösungen nahtlos. 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 der Änderung
CMakeLists.txt
der Liste der Quelldateien und der Neuerstellung der Projekte / Lösungen. Es gibt sogar eine Globbing-Funktion, um alle Quellen in einem Verzeichnis zu finden (obwohl sie mit Vorsicht verwendet werden sollte).Der folgende Link erklärt das spezifische Verhalten von CMake und Visual Studio sehr gut.
CMake und Visual Studio
quelle
CMake kann wirklich schönes Visual Studio
.projs
/ generieren.slns
, aber es gibt immer das Problem, dass die.cmake
Dateien anstelle von.proj
/ geändert werden müssen.sln
. So wie es jetzt ist, haben wir es wie folgt zu tun:/src
und in Visual Studio sichtbare Dateien sind nur "Links" zu ihnen, die in definiert sind.filter
./src
Verzeichnis zu arbeiten, nicht an dem des Standardprojekts..cmake
Dateien "aktualisiert" .Anfangs hatten wir ein wenig Angst davor, wie es ausgehen wird, aber der Workflow funktioniert wirklich gut und mit einem schönen Diff, der vor jedem Commit sichtbar ist, kann jeder leicht sehen, ob seine Änderungen korrekt in
.cmake
Dateien zugeordnet wurden.Eine weitere wichtige Sache, die Sie wissen sollten, ist die mangelnde Unterstützung ( afaik ) für "Lösungskonfigurationen" in CMake. Derzeit müssen Sie zwei Verzeichnisse mit Projekten / Lösungen generieren - eines für jeden Build-Typ (Debug, Release usw.). Es gibt keine direkte Unterstützung für anspruchsvollere Funktionen - mit anderen Worten: Wenn Sie zwischen Konfigurationen wechseln, erhalten Sie nicht das, was Sie erwarten.
quelle
Viele gute Antworten hier, aber sie könnten durch diese CMake-Unterstützung in Visual Studio (5. Oktober 2016) ersetzt werden.
quelle
Ich habe mein eigenes Projekt namens syncProj gestartet. Dokumentations- / Download-Links von hier:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
Wenn Sie Visual Studio für die Entwicklung verwenden möchten und derzeit nur C ++ unterstützt wird.
Der Hauptvorteil gegenüber anderen make-Systemen besteht darin, dass Sie Ihr Skript tatsächlich debuggen können, da es C # -basiert ist.
Wenn Sie mit syncProj nicht vertraut sind, können Sie Ihre Lösung / Ihr Projekt einfach in ein CS-Skript konvertieren und von diesem Punkt an die Weiterentwicklung fortsetzen.
In cmake müssen Sie alles von Grund auf neu schreiben.
quelle