【发布时间】:2015-04-06 14:02:33
【问题描述】:
在我的 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")
之后,我尝试通过以下方式查找库:
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()
【问题讨论】:
标签: cmake