CMake で、同じ CMake プロジェクト内でビルドされていない外部共有ライブラリに実行可能ファイルをリンクするにはどうすればよいですか?
実行するとtarget_link_libraries(GLBall ${CMAKE_BINARY_DIR}/res/mylib.so)
エラーが発生します
make[2]: *** No rule to make target `res/mylib.so', needed by `GLBall'. Stop.
make[1]: *** [CMakeFiles/GLBall.dir/all] Error 2
make: *** [all] Error 2
(GLBall is the executable)
ライブラリをバイナリディレクトリにコピーした後bin/res
。
使ってみたfind_library(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res)
で失敗しますRESULT-NOTFOUND
。
ベストアンサー1
arrowdodger さんの回答は正しく、多くの場合に好まれます。私は単に彼の回答に代わる回答を追加したいと思います。
リンク ディレクトリの代わりに、「インポートされた」ライブラリ ターゲットを追加できます。次のようになります。
# Your-external "mylib", add GLOBAL if the imported library is located in directories above the current.
add_library( mylib SHARED IMPORTED )
# You can define two import-locations: one for debug and one for release.
set_target_properties( mylib PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/res/mylib.so )
そして、このライブラリがプロジェクトによって構築されたかのようにリンクします。
TARGET_LINK_LIBRARIES(GLBall mylib)
このようなアプローチは、もう少し柔軟性を持たせることができます。add_library(インポート済み)コマンドとインポートされたライブラリに関連する多くのターゲットプロパティ。
これによって「ライブラリの更新バージョン」の問題が解決するかどうかはわかりません。