In meinem CMake-Projekt stelle ich einen Standardpfad zu Boost zur Verfügung, der vom Benutzer bearbeitet werden kann.CMake - Erzwinge find_package, um Cache-Variablen zu aktualisieren
set(PATH_BOOST_DEFAULT "/softs/boost/${BOOST_VER}/${ARCH}/gcc/${GCCVER}")
set(PATH_BOOST "${PATH_BOOST_DEFAULT}" CACHE PATH "Default path to Boost")
Danach, ich versuche, die Libs zu finden, mit:
set(BOOST_ROOT "${PATH_BOOST}")
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.53.0 REQUIRED COMPONENTS thread system)
Dies funktioniert gut, und viele Cache-Variablen wie Boost_INCLUDE_DIR
, Boost_LIBRARY_DIRS
oder Boost_THREAD_LIBRARY_DEBUG
erzeugt.
Mein Problem kommt, wenn ich versuche, die Cache-Variable PATH_BOOST
zu ändern: Die Cache-Variablen von FindBoost.cmake
generiert 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 im Cache sind.
Gibt es eine Möglichkeit, zu Cmake zu sagen: "Wenn der Pfad vom Benutzer geändert wird, refind das Paket durch Erzwingen der Cache-Variablen"?
Gibt es auch eine bessere Möglichkeit zu erkennen, eine Cache-Variable wurde nur als die folgende hässliche Idee geändert? : -/
set(MY_VAR ${MY_VAR_DEFAULT} CACHE TYPE "")
if(NOT DEFINED MY_VAR_copy)
set(MY_VAR_copy ${MY_VAR} CACHE INTERNAL "")
mark_as_advanced(FORCE MY_VAR_copy)
endif()
if(NOT "${MY_VAR}" STREQUAL "${MY_VAR_copy}")
# my_var is modified : do something
set(MY_VAR_copy ${MY_VAR} CACHE INTERNAL "")
endif()