In meinem CMake-Projekt stelle ich Boost einen Standardpfad zur Verfügung, der vom Benutzer bearbeitet werden kann.
%Vor%Danach versuche ich die libs mit:
zu finden %Vor% Dies funktioniert gut und viele Cache-Variablen wie Boost_INCLUDE_DIR
, Boost_LIBRARY_DIRS
oder Boost_THREAD_LIBRARY_DEBUG
werden generiert.
Mein Problem tritt auf, wenn ich versuche, die Cache-Variable PATH_BOOST
zu ändern: Die von FindBoost.cmake
generierten Cache-Variablen werden nicht aktualisiert. Das Skript FindBoost.cmake
scheint erneut aufgerufen zu werden (es werden Nachrichten über gefundene Komponenten gedruckt). Ich denke, die Variablen wie Boost_INCLUDE_DIR
werden nicht aktualisiert, weil sie sich im Cache befinden.
Gibt es eine Möglichkeit, zu cmake zu sagen: "Wenn der Pfad vom Benutzer geändert wird, muss das Paket durch Erzwingen der Cache-Variablen neu gefunden werden?"
Gibt es auch eine bessere Möglichkeit, eine Cache-Variable zu erkennen, die gerade geändert wurde als die folgende hässliche Idee? : - /
%Vor%Ich denke, ich habe das gleiche Problem wie du. Mein Setup versucht, eine bestimmte Version eines Pakets zu finden:
%Vor% Das Skript für die Paketkonfiguration legt die zwischengespeicherte Variable MYPACK_LIBRARIES
fest, die dann zu einem späteren Zeitpunkt verwendet wird. Wenn ich jedoch die Variable MYPACK_REQUIRED_VERSION
ändere, benutze immer noch den alten MYPACK_LIBRARIES
, anstatt nach der neuen Version zu suchen.
Ich glaube, ich habe das Problem jetzt gelöst, indem ich diese Cache-Variable unscharf geschaltet habe:
%Vor% Dies scheint die Prozedur find_package in meinem Fall erneut auszulösen. Es gibt einige feinere Details der find_package
-Prozedur, die ich nicht vollständig verstehe, also könnte das in Ihrem Fall nicht funktionieren, aber es könnte einen Versuch wert sein.
Tags und Links cmake