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.