CMake projemde, kullanıcı tarafından düzenlenebilir duruma getirme için bir varsayılan yol sağlarım.CMake - Önbellek değişkenlerini güncellemek için force 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")
Ondan sonra, birlikte kütüphanelerini bulmaya: Bu iyi çalışır ve Boost_INCLUDE_DIR
, Boost_LIBRARY_DIRS
veya Boost_THREAD_LIBRARY_DEBUG
gibi önbellek değişkenlerin bir sürü oluşturulur
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)
.
Sorunum, PATH_BOOST
önbellek değişkenini değiştirmeyi denediğimde gelir: FindBoost.cmake
tarafından oluşturulan önbellek değişkenleri güncellenmez. FindBoost.cmake
komut dosyası yeniden çağrılacak gibi görünüyor (bulunan bileşenler hakkında mesajlar yazdırıyor). Boost_INCLUDE_DIR
gibi değişkenler önbellekte oldukları için güncellenmediklerini düşünüyorum.
"Yol, kullanıcı tarafından değiştirilmişse, önbellek değişkenlerini zorlayarak paketi geri çekilsin" ifadesinin bir yolu var mı?
Ayrıca, bir önbellek değişkeninin yalnızca aşağıdaki çirkin fikirden daha farklı olduğunu saptamanın daha güzel bir yolu var mı? : -/
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()