Ich bin damit beschäftigt, meinen Build-Prozess von msbuild nach cmake zu portieren, um besser mit der gcc toolchain umgehen zu können (was viel schneller Code für einige der numerischen Dinge erzeugt, die ich mache) .cmake: Arbeiten mit mehreren Ausgabekonfigurationen
Nun, ich würde gerne Cmake, um mehrere Versionen der Ausgabe, Zeug wie eine Version mit sse2, eine andere mit x64, und so weiter. CMake scheint jedoch am natürlichsten zu funktionieren, wenn Sie einfach eine Reihe von Flags (zB "sse2_enable" und "platform") haben und dann eine Ausgabe basierend auf diesen Plattformen generieren.
Was ist der beste Weg, um mit mehreren Ausgangskonfigurationen wie diesem zu arbeiten? Intuitiv möchte ich über eine große Anzahl von Flag-Kombinationen iterieren und die gleichen CMakeLists.txt-Dateien für jede Kombination erneut ausführen - aber natürlich können Sie nicht die innerhalb der CMakeLists.txt-Dateien (AFAIK) ausdrücken.
Es gibt jedoch mehrere Probleme mit diesem Ansatz. Zuallererst erfordert es mehrere Aufrufe zum cmake & make für wenig Gewinn, aber es führt zu einer zusätzlichen Komplexität: cmake ist * plattformübergreifend *, aber Shell-Skripting ist es nicht. Zweitens verlangsamt es die Dinge ein wenig; Normalerweise können Sie make -j verwenden, um alle verschiedenen Kombinationen auf nette Multithread-Weise zu erstellen, aber mit dem Multiple-Cmake-Ansatz müssen Sie manuell parallelisieren (und höhere Speicherbelegungen und Lade- und Verlangsamungen akzeptieren, da die separaten Instanzen keine make machen) kooperieren). Der Vorteil ist, dass es Namenskonflikte bewältigen kann. –
Ein weiterer Nachteil: Ein zweiter Anwendungsfall war die Erstellung mehrerer Builds für verschiedene CPUs und die Auswahl der besten zur Laufzeit - und dann ist es wirklich notwendig, dass das Endergebnis von mehreren Builds desselben Subs abhängt -Projekt. –
Deshalb habe ich mich für die andere Lösung entschieden - aber Ihre ist definitiv kanonischer und arbeitet (mit den oben genannten Nachteilen) allgemeiner - danke für Ihren Beitrag! –