在我的CMake項目中,我提供了一個用戶可以編輯的Boost默認路徑。CMake - 強制find_package更新緩存變量
set(PATH_BOOST_DEFAULT "/softs/boost/${BOOST_VER}/${ARCH}/gcc/${GCCVER}")
set(PATH_BOOST "${PATH_BOOST_DEFAULT}" CACHE PATH "Default path to Boost")
在那之後,我嘗試找到庫:
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()