9

静的ブースト ライブラリに対してコンパイルしたい CMake プロジェクトがありますが、cmake GUI から動的ライブラリを簡単に使用できるようにしたいと考えています。トップレベルの CMakeLists.txt には、次のものがあります。

option(USE_STATIC_BOOST "Build with static BOOST libraries instead of dynamic" NO)

次に、別のファイルで、次のロジックを設定します。

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)

ゼロから始めて使用すると、これはうまくいくようです:

cmake ../.. -DUSE_STATIC_BOOST=YES

しかし、私が使用するとき

ccmake ../..

何をしても静的ライブラリを使用することはできません。CMake は起動時に動的オプションをキャッシュにロードするように見え、USE_STATIC_BOOST を変更しても切り替えられません。明示的にクリアするために unset(Boost_LIBRARIES) を試みました。私がやろうとしていることをする方法はありますか?

x86_64 Linux と g++ を使用してコンパイルします。前もって感謝します!

4

1 に答える 1

12

FindBoost CMake モジュールに目的のライブラリを再度検索させるには、キャッシュ変数と をクリアする必要がありますBoost_INCLUDE_DIRつまりBoost_LIBRARY_DIRS、次のようになります。

set(Boost_USE_STATIC_LIBS ${USE_STATIC_BOOST})
set(Boost_USE_MULTITHREADED ON)
unset(Boost_INCLUDE_DIR CACHE)
unset(Boost_LIBRARY_DIRS CACHE)
find_package(Boost REQUIRED COMPONENTS thread program_options system)
if(USE_STATIC_BOOST)
   message(STATUS "Linking against boost static libraries")
else()
   message(STATUS "Linking against boost dynamic libraries")
endif()

unsetコマンドでキャッシュ内の変数をクリアするには、引数CACHEが必要であることに注意してください。

また、オプション変数USE_STATIC_BOOSTがキャッシュされたら、コマンド ラインから変数を明示的に設定するか、キャッシュ ファイルの値を編集して、CMake に変更を通知させる必要があることに注意してください。

cmake ../.. -DUSE_STATIC_BOOST=NO 
于 2012-07-27T12:51:51.050 に答える