CONAN NO_OUTPUT_DIRS
«« | 14 Jan 2023 | »»Beim ersten conan build Aufruf landen alle finalen Dateien im richtigen
Verzeichnis. Man debugged ein bisschen und ruft cmake zur Aktualisierung
auf … doch die Binärdateien werden nicht aktualisiert.
Anstatt dessen findet man die Dateien in anderen Verzeichnissen. Willkommen in der Conan (v1) Hilfegruppe.
Wenn Conan den CMake Generator benutzt,
stellt dieser diverse Pfade für den Buildoutput ein. Denn Conan “wünscht”
sich, dass Ausgabepfade wie bin für Binaries und lib für Bibliotheken
benutzt werden.
Doch auch CMake interne Scripts können diese Pfade anpassen.
Und so kommt es gerne mal zu Konflikten, die nicht immer gleich sichtbar
werden.
Ich hatte in der Firma genau das Problem, dass der erste conan install
und conan build Aufruf genau zu den Ergebnissen geführt hatte, die auch
zu erwarten waren.
Wenn man nun aber während der aktiven Weiterentwicklung cmake oder make
erneut aufrief, um Änderungen nachzukompilieren, landeten sie in den von
CONAN definierten Verzeichnissen und nicht dort, wo die CMake Scripts sie
hätten ablegen sollen.
Lösung: NO_OUTPUT_DIRS
In von Conan v1 addressierteb CMakeLists.txt Dateien befindet sich in der
Regel der Aufruf:
conan_basic_setup().
Diese Makro holt alle notwendigen Variablen für den Buildprozess in das
CMake-Projekt und ist unter anderem auch für die “ungewollte” Änderung der
Pfade verantwortlich.
Doch die Conan Macher haben dem Makro einige Parameter übergeben,
darunter auch:
conan_basic_setup(NO_OUTPUT_DIRS).
Damit wird das manchmal störende Verhalten von Conan abgeschaltet und die
Kontrolle alleine an CMake übergeben.
Fazit
Es gibt noch ein paar andere Optionen für das Basic-Setup, doch
NO_OUTPUT_DIRS zeigt, dass die Conan Macher viele Varianten von
Builds schon durchgedacht haben.
Im Standard schreibt Conan alles so um, dass es am Ende möglichst einfach
wieder Paket erzeugen kann. Doch da viele CMake Scripts hier manuell
eingreifen, kann dieses Feature optional ausgeschaltet werden.
Ein einfältiger Kollege meinte auch gleich, es müsse das gesamte
Conan Build-System auf den Kopf stellen um Kontrolle über Pfade zu erhalten.
Naja, ein Blick in die Doku und 14 Zeichen lösen das Problem natürlich
auch und beschreiten den vorgesehenen Pfad.
Zugegeben, Conan ist auf Grund seiner vielen Möglichkeiten ein komplexer
Moloch geworden … doch je länger ich damit arbeite, um so mehr lerne ich,
wie flexibel die Software gestaltet ist.
Und ab Conan v2 wird ohnehin die Verantwortung für den Build viel
weitreichender an die Generator-Toolsets abgegeben.
Aber das ist eine andere Geschichte.
