cmake: Arbeiten mit mehreren Ausgabekonfigurationen

8

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 gerade mache).

Nun möchte ich, dass CMake mehrere Versionen der Ausgabe erzeugt, etwa 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.

Wie arbeiten Sie am besten mit mehreren Ausgabekonfigurationen? 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 das nicht in den CMakeLists.txt-Dateien ausdrücken (AFAIK).

    
Eamon Nerbonne 19.02.2010, 15:44
quelle

2 Antworten

4

Es gab hier nicht viel Aktivität, also habe ich mir selbst eine praktikable Lösung ausgedacht. Es ist wahrscheinlich nicht ideal, also wenn Sie eine bessere Idee haben, fügen Sie sie bitte hinzu!

Nun ist es schwierig, über Build-Konfigurationen in cmake zu iterieren, da die entscheidenden Variablen von cmake nicht im Funktionsumfang liegen - also zum Beispiel, wenn Sie include_directories(X) ausführen, bleibt das X-Verzeichnis auch nachher in der Include-Liste Die Funktion wird beendet.

Verzeichnisse haben einen Gültigkeitsbereich - und obwohl normalerweise jedes Eingabeverzeichnis einem Ausgabeverzeichnis entspricht, können Sie mehrere Ausgabeverzeichnisse haben.

Also, meine Lösung sieht so aus:

%Vor%

Das normale Projektverzeichnis enthält dann eine CMakeLists.txt -Datei mit Code, um die entsprechenden Includes und Compiler-Optionen für die im Projekt FooAllConfigs festgelegten globalen Variablen einzurichten. Außerdem wird ein Build-Suffix festgelegt, das an alle Build-Ausgaben angehängt wird - Jede sogar indirekt eingeschlossene Ausgabe (zB wie von add_executable generiert) muss einen eindeutigen Namen haben.

Das funktioniert gut für mich.

    
Eamon Nerbonne 01.03.2010, 15:57
quelle
6

Der empfohlene Weg ist, einfach mehrere Build-Verzeichnisse zu haben. Von jedem einzelnen rufen Sie einfach cmake mit den erforderlichen Einstellungen auf.

Zum Beispiel könnten Sie tun, beginnend im Basis-Quellverzeichnis (unter Verwendung der Linux-Shell-Syntax, aber die Idee ist die gleiche):

%Vor%

Auf diese Weise ist jedes Build-Verzeichnis vollständig voneinander getrennt.

Damit können Sie ein Verzeichnis für Debug, ein anderes für Release und ein anderes für Cross-Compiling haben.

    
Milliams 03.03.2010 14:09
quelle

Tags und Links