私はときどき静的なブーストライブラリとコンパイルしたいCMakeプロジェクトを持っていますが、cmake GUIのダイナミックライブラリを使うのも簡単です。私のトップレベルのCMakeLists.txtでは、私が持っているこの:オプションで、CMakeを使用して静的または動的ブーストライブラリにリンクすることはできますか?
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を変更してもスイッチを切り替えません。私は明示的にそれをクリアするために(Boost_LIBRARIES)設定を解除しようとしました。私がやろうとしていることをする方法はありますか?
x86_64 Linuxおよびg ++を使用してコンパイルする。前もって感謝します!
パーフェクト - 感謝しました! 質問に続きます:なぜBoost_USE_STATIC_LIBSをON/OFFに設定するのがfind_packageと同じスコープで行われる必要があるのでしょうか?上記のif/else/endifブロックからfind_packageを取得した場合、Boost_USE_STATIC_LIBSフラグは無視されます。 – KyleL
@KdawgUDスコープが同じでなくても、私のために働きます。とにかく、if-elseステートメントのコードの重複の大半は避けることができます(更新された回答を参照) – sakra
もう一度お手伝いをしてください。私はスコープの問題だと思っていたときにキャッシュ問題と戦っていたかもしれません。重複したコードを削除するようあなたの提案をしました。乾杯! – KyleL