Trong dự án CMake của tôi, tôi cung cấp một đường dẫn mặc định để Boost có thể chỉnh sửa bởi người dùng.CMake - Force find_package để cập nhật biến bộ nhớ cache
set(PATH_BOOST_DEFAULT "/softs/boost/${BOOST_VER}/${ARCH}/gcc/${GCCVER}")
set(PATH_BOOST "${PATH_BOOST_DEFAULT}" CACHE PATH "Default path to Boost")
Sau đó, tôi cố gắng tìm ra libs với:
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)
này hoạt động tốt và rất nhiều biến bộ nhớ cache như Boost_INCLUDE_DIR
, Boost_LIBRARY_DIRS
hoặc Boost_THREAD_LIBRARY_DEBUG
được tạo ra.
Sự cố của tôi xuất hiện khi tôi cố gắng sửa đổi biến bộ nhớ cache PATH_BOOST
: các biến bộ nhớ cache được tạo bởi FindBoost.cmake
không được cập nhật. Kịch bản FindBoost.cmake
dường như được gọi lại (nó in thông báo về các thành phần tìm thấy). Tôi nghĩ rằng các biến như Boost_INCLUDE_DIR
không được cập nhật vì chúng nằm trong bộ nhớ cache.
Có cách nào để nói với cmake "nếu đường dẫn được sửa đổi bởi người dùng, hãy refind gói bằng cách buộc các biến bộ nhớ cache"?
Ngoài ra, có cách nào tốt hơn để phát hiện biến bộ nhớ cache vừa được sửa đổi hơn ý tưởng xấu xí sau đây không? : -/
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()