したがって、コンパイル中のライブラリがあり、それがデバッグまたはリリースビルド(具体的には、それらのライブラリのリリースまたはデバッグバージョン)に応じて、異なるサードパーティのものをリンクする必要があります。 Cmakeでこれを行う簡単な方法はありますか?
編集:Visual Studioを使用していることに注意してください
CMakeドキュメント によると:
target_link_libraries(<target> [lib1 [lib2 [...]]] [[debug|optimized|general] <lib>] ...)
「debug」、「optimized」、または「general」キーワードは、それに続くライブラリが対応するビルド構成にのみ使用されることを示します。
だからあなたはこれを行うことができるはずです:
add_executable( MyEXE ${SOURCES})
target_link_libraries( MyEXE debug 3PDebugLib)
target_link_libraries( MyEXE optimized 3PReleaseLib)
どういうわけか、@ Mike Willekesからの答えは、同じターゲットのリリースとdebugの両方でCMakeリンクを取得しました:(
@sakra 関連する質問 -で示唆されているように、両方の設定を1行で設定することでこれを機能させましたが、リンクする必要があるすべてのライブラリに対してそうします:
target_link_libraries ( app
debug ${Boost_FILESYSTEM_LIBRARY_DEBUG}
optimized ${Boost_FILESYSTEM_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_LOG_LIBRARY_DEBUG}
optimized ${Boost_LOG_LIBRARY_RELEASE} )
target_link_libraries ( app
debug ${Boost_PROGRAM_OPTIONS_LIBRARY_DEBUG}
optimized ${Boost_PROGRAM_OPTIONS_LIBRARY_RELEASE} )
# ...
以前の回答にいくつかのメモを追加したいと思います。
リンクして複数のファイルのリストを作成してキャッシュ変数に保存する必要がある場合は、各ライブラリの前に指定されたoptimized
またはdebug
を追加する必要があります。これは、より大きなメイクファイル/プロジェクトに特に役立ちます。
たとえば、次のようなことができます。
set( MyFavLib_LIBRARIES
debug debug/module1.lib optimized release/module1.lib
debug debug/module2.lib optimized release/module2.lib )
target_link_libraries( app ${MyFavLib_LIBRARIES} )
私のために働いたのは、cmakeに提供されたlibパスで$(Configuration)
マクロを使用することでした。
そのため、ライブラリが別々の、適切な名前のフォルダーに保存されていると仮定します、例えば:
_C:\boost\lib\Debug\libfoo.lib
C:\boost\lib\Release\libfoo.lib
_
その後、次を使用してcmakeを呼び出すことができます。
_cmake -G "Visual Studio 10 2010" -DBOOST_LIBRARYDIR=C:\boost\lib\$(Configuration)\libfoo.lib
_
C:\boost\lib\$(Configuration)\libfoo.lib
を含む追加の依存関係を持つ.vcxprojが生成され、選択された構成に応じて_C:\boost\lib\Release\libfoo.lib
_または_C:\boost\lib\Debug\libfoo.lib
_に評価されます。