Mam projekt CMake, który czasami chcę skompilować przeciwko statycznym bibliotekom boost, ale chcę również ułatwić korzystanie z dynamicznych bibliotek z GUI cmake. W moim najwyższym poziomie CMakeLists.txt mam to:Jak mogę opcjonalnie połączyć się ze statyczną lub dynamiczną biblioteką doładowania za pomocą CMake?
option(USE_STATIC_BOOST "Build with static BOOST libraries instead of dynamic" NO)
Następnie w innym pliku, mam następujący logiczny skonfigurować:
if(USE_STATIC_BOOST)
unset(Boost_LIBRARIES)
message(WARNING "Linking against boost static libraries")
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost REQUIRED COMPONENTS thread program_options system)
else(USE_STATIC_BOOST)
unset(Boost_LIBRARIES)
message(WARNING "Linking against boost dynamic libraries")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost REQUIRED COMPONENTS thread program_options system)
endif(USE_STATIC_BOOST)
To wydaje się działać prawidłowo, jeśli zacznę od podstaw i używać:
cmake ../.. -DUSE_STATIC_BOOST=YES
jednak kiedy używam
ccmake ../..
Nie mogę go użyć do korzystania z bibliotek statycznych bez względu na to, co robię. Wydaje się, że CMake załadował opcję dynamiczną do pamięci podręcznej podczas uruchamiania i zmiana USE_STATIC_BOOST go nie zmienia. Próbowałem nawet usunąć ustawienie (Boost_LIBRARIES), aby jawnie je usunąć. Czy istnieje sposób, aby zrobić to, co próbuję zrobić?
Użycie x86_64 Linux i g ++ do kompilacji. Z góry dziękuję!
doskonały - to działało świetnie, dzięki! Pytanie uzupełniające: Czy wiesz, dlaczego ustawienie Boost_USE_STATIC_LIBS na ON/OFF musi się odbywać w tym samym zakresie co pakiet find_? Jeśli wyjmę pakiet find_out z powyższego bloku if/else/endif, nie będzie on honorował flagi Boost_USE_STATIC_LIBS. – KyleL
@KdawgUD Działa to dla mnie, nawet jeśli zasięg nie jest taki sam. W każdym razie można uniknąć większości powielania kodu w instrukcji if-else (patrz zaktualizowana odpowiedź). – sakra
Jeszcze raz dziękuję za pomoc. Być może walczyłem z problemem z pamięcią podręczną, kiedy widziałem, co uważałem za problem z zasięgiem. Przyjąłem twoją sugestię, aby usunąć zduplikowany kod. Twoje zdrowie! – KyleL