Occa: cmake-Unterstützung

Erstellt am 8. Okt. 2018  ·  11Kommentare  ·  Quelle: libocca/occa

Hallo OCCA-ler,

Irgendwelche Pläne, cmake zu haben, um das Build-System zu generieren?
Alle unsere Software für wissenschaftliche Berechnungen verwendet es. Dies erfordert eine gute Anstrengung, aber es zahlt sich aus, wenn es einmal getan ist.

Am besten,

Amik

question help wanted

Alle 11 Kommentare

Meine 2 Cent...

Viele Softwarepakete, die ich verwende (z. B. VTK), werden mit cmake konfiguriert und erstellt, aber ich persönlich mag es nicht. Nicht so sehr für die cmake-Sprache und den Code, den man schreiben muss, sondern eher für die sehr obskuren Makefile-„Komponenten“, die es in eine tiefe und verschleierte Verzeichnisstruktur generiert. Herauszufinden, warum cmake fehlschlägt oder warum etwas nicht richtig kompiliert wird, oder wie man einen Build optimiert, kann eine nicht triviale Aufgabe sein (zumindest für mich).

Das Generieren eines Makefiles für die aktuelle Build-Umgebung gemäß den Konfigurationsspezifikationen ist im Allgemeinen eine gute Sache, aber was auch immer der Generator sein mag, sollte meiner Meinung nach nur ein einziges, flaches, unkompliziertes Makefile generiert werden, das lesbar und potenziell anpassbar ist (wie ehrwürdiges 'configure ' tut). Das ist sicher nicht cmake!

Hallo Paul,

Ich bin nicht verliebt in es, aber wenn es einmal in einem Projekt installiert ist, ist es ziemlich solide. Der Hauptvorteil davon ist die Integration und das Testen. Angenommen, ich würde zum Beispiel anfangen, OCCA in einen ziemlich großen Code zu integrieren, ich würde die Quelle in ein Verzeichnis namens 3rdparty legen, und wenn es cmake verwenden würde, würde ich cmake einfach das neue Verzeichnis mitteilen add_directory(...) . Dann würde es OCCA automatisch erstellen, indem es die Compiler und andere Spezifikationen aus der "obersten" CMakeLists.txt verwendet. Wenn ich Abhängigkeiten zu OCCA in einem Testtreiber (anfangs) und später zu weiteren Quell-/anderen Verzeichnissen hinzufügen würde, wäre es ein Kinderspiel.

Meine Erfahrung mit cmake ist, dass, wenn Sie Probleme auf der "make"-Ebene haben, das Problem normalerweise darin besteht, dass Sie sich zu sehr auf cmake auf der obersten Ebene spezialisiert haben (z. B. explizite Compiler-Flags erzwingen ...). Bei den meisten Problemen zeigt make VERBOSE=1 die vollständige Kompilierzeile (die Sie ausschneiden und einfügen können), um herauszufinden, was falsch ist (und ändern Sie dann das cmake (nicht das make)).

Wir verwenden auch ständig ctest ...

Jedenfalls wollte ich das Wasser diesbezüglich nur testen.

Am besten,

Amik

Ich bin ein Fan davon ( vielleicht zu sehr ), tatsächlich war die CMake-Unterstützung das erste, wonach ich gesucht habe. Ich verwalte alle Abhängigkeiten (zum Beispiel in GooFit ) als Git-Submodule in extern, und dann überprüft CMake diese für den Benutzer, wenn er nichts über Submodule weiß, dann kombiniert CMake alle Abhängigkeiten. Das Tolle an CMake ist, dass es jede Arbeitsweise unterstützt – wenn ich zum Beispiel eine IDE wie Xcode verwenden möchte, ist es einfach, nur wenn CMake verwendet wird. Ich kann CCache, Debug-Builds, Clang-Tidy usw. ganz einfach hinzufügen.

@henryiii Wenn es eine IDE-Integration hat, klingt das nach einer guten Idee!

Ich zögere, den Makefile-Build zu entfernen, da make an den meisten Stellen sofort einsatzbereit ist, aber wir können CMake-Unterstützung daneben hinzufügen. Wir können die CI-Konfiguration aktualisieren, um Tests sowohl mit make - als auch mit cmake -Builds auszuführen.

Wenn Sie Zeit haben, können Sie mit den CMake-Kerndateien eine PR dafür erstellen? Wenn es hilft, kann ich alle Umgebungsvariablen/Nebeneffekte hinzufügen, die während der Buildzeit erwartet werden

Im Moment müssen neue/potenzielle OCCA-Benutzer (HPC-Programmierer) nur die OCCA-Quelle herunterladen und make eingeben. Sehr einfach. Für mich basiert das Wertversprechen von OCCA zu 100 % auf den herausragenden Funktionen, die es im Bereich der parallelen Programmierung bietet, nicht in seinem Build-System. Trotzdem würde es vielleicht einen kleinen Mehrwert für OCCA geben, auf cmake-basierte Builds umzusteigen, ich weiß es nicht.

Vielleicht könnte jemand, der sich mit cmake-Codierung auskennt, die erforderlichen cmake-Dateien schreiben und sie über eine Pull-Anfrage zu OCCA beitragen? Das könnte helfen, die Bedenken zu zerstreuen, die einige Leute zu haben scheinen, und ihnen helfen, OCCA tatsächlich zu verwenden.

Zurück zum Thema cmake, für einige von uns kann "Laufleistung variieren". Im Ernst, ich bin mir sicher, dass meine Begeisterung für cmake stark steigen würde, wenn ich tatsächlich lernen würde, wie man cmake-Sprachcode auf einem Niveau schreibt / debuggt / modifiziert, das über meinem derzeitigen Prä-Neuling-Stadium liegt. In der Zwischenzeit, wenn ich auf frustrierende Probleme mit schlecht geschriebenen / veralteten CMakeLists.txt und/oder fehlerhaften oder schlecht geschriebenen Find*.cmake -Dateien stoße, die für ein Paket, von dem ich gerade heruntergeladen habe, ordnungsgemäß funktionieren github zur Bewertung, ich kann unangenehme Empfindungen negativer Wertschätzung haben!

@pdhahn Nur um das klarzustellen, ich glaube nicht, dass ich jemals den Build "nur make zum Kompilieren eingeben" loswerden würde. Muss auf jeden Fall aufgeräumt werden (#149), aber die Vereinfachung der Installation und Verwendung für die Benutzer hat hier oberste Priorität

Das Hinzufügen von CMake würde helfen, OCCA in Projekten zu verwenden, die bereits CMake verwenden, und es sieht so aus, als würde es das Leben von Entwicklern mit dieser IDE-Integration einfacher machen.

@dmed256 Du hast Recht, das IDE-Ding klingt, als könnte es ein nicht trivialer Mehrwert für OCCA sein!

Sie müssen jedoch mindestens eine Vielzahl beliebter IDEs wie Eclipse und Qt Creator unterstützen.

CMake unterstützt alle Arten von Tools (und alle Arten von Tools unterstützen es), nicht nur IDEs. Alle wichtigen IDEs werden entweder von CMake unterstützt oder CMake unterstützt sie. CLion, Qt Creator, Eclipe, Xcode und mehr. Es unterstützt auch Link-What-You-Use, Include-What-You-Use, Clang-Tidy, Ccache, verschiedene Testintegrationen, Paketierung und mehr.

Wenn der CMake-Build gut funktioniert hat, können Sie das Makefile schließlich einfach CMake für Sie aufrufen lassen, das habe ich zuvor in GooFit gemacht. Sie könnten sogar das Makefile CMake herunterladen und es dann aufrufen (ich habe das noch nie versucht, aber ich glaube, ich habe mit jemandem gesprochen, der es getan hat); Dies würde es ermöglichen, dass es überall und mit der neuesten Version funktioniert (Sie müssten nur einen einfachen Umschalter haben, der die Linux- oder Macos-Binärdatei herunterlädt, je nachdem, wo Sie ausgeführt wurden).

Ich hoffe, Occa in den nächsten Wochen zu evaluieren und dann vielleicht mit der CMake-Unterstützung helfen zu können.

@henryiii Das macht Sinn, wir haben nur so viel Zeit :) Unabhängig davon, schätzen Sie diesen CMake-Ratschlag!

Abschließend danke ich der ganzen Arbeit von @hknibbe2 , @SFrijters , @amikstcyr und @JamesEggleton 🎉

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen