В моем проекте CMake я предоставляю по умолчанию путь к Boost, редактируемый пользователем.
set(PATH_BOOST_DEFAULT "/softs/boost/${BOOST_VER}/${ARCH}/gcc/${GCCVER}")
set(PATH_BOOST "${PATH_BOOST_DEFAULT}" CACHE PATH "Default path to Boost")
После этого я пытаюсь найти libs с:
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)
Это работает отлично, и генерируется много переменных кэша, таких как Boost_INCLUDE_DIR
, Boost_LIBRARY_DIRS
или Boost_THREAD_LIBRARY_DEBUG
.
Моя проблема возникает, когда я пытаюсь изменить переменную кеша PATH_BOOST
: переменные кэша, созданные FindBoost.cmake
, не обновляются. Сценарий FindBoost.cmake
кажется, снова вызван (он печатает сообщения о найденных компонентах). Я думаю, что переменные типа Boost_INCLUDE_DIR
не обновляются, поскольку они находятся в кеше.
Есть ли способ сказать cmake "если путь изменен пользователем, переустановите пакет, заставив переменные кэша"?
Кроме того, существует ли более удобный способ определения переменной кэша, только что измененной, чем следующая уродливая идея? : -/
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()