2017-08-28 18 views
0

CMakeを使用して共有ライブラリにリンクしようとしています。私はこれがtarget_link_libraries()コマンドを使用して達成できることを理解しています。私はこれを得ることができましたが、私が望むような方法ではありません。CMakeを使って共有ライブラリを見つける方法を指定するには?

以下のCMakeLists.txtを使用して、私は共有ライブラリにリンクできました。

cmake_minimum_required(VERSION 3.7) 
project(DylibTest) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(DylibTest ${SOURCE_FILES}) 

target_link_libraries(DylibTest 
${CMAKE_SOURCE_DIR}/Resources/libDynamicTest.dylib) 

これは、プロジェクトが置かれているディレクトリを検索するようにリンカーに指示しているようだ。これは、開発のための罰金ですが、どのように私はこのプロジェクトを配布するのでしょうか?エンドユーザーには、この同じフォルダーはありません。

私はそうのような相対パスを渡ししようとしました:私はtarget_link_directoriesのドキュメントを見てきました

No rule to make target `/Resources/libDynamicTest.dylib', needed by `DylibTest'. Stop. 

:これを行う際

cmake_minimum_required(VERSION 3.7) 
project(DylibTest) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(DylibTest ${SOURCE_FILES}) 

target_link_libraries(DylibTest /Resources/libDynamicTest.dylib) 

、私は次のエラーを取得します()しかしそれは役に立たなかった。私はここで他にも数多くの質問を見てきました。

私の意図は、共有ライブラリを含む "Resources"という名前のフォルダで実行可能ファイルを配布することです。これを行うにはどうすれば私のCMakeLists.txtファイルが見えますか?

編集:この質問にはthis questionと重複している可能性があるとマークされていますが、私はその質問は基本的に同じことを求めていると認めています。ここで

は私のCMakeLists.txtは、他の質問に受け入れ答えをしようとした後、どのように見えるかです:

cmake_minimum_required(VERSION 3.7) 
project(DylibTest) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(DylibTest ${SOURCE_FILES}) 

link_directories(${CMAKE_BINARY_DIR}/Resources) 
target_link_libraries(DylibTest DynamicTest) 

これは残念ながら、ライブラリが見つからなかったことを示すエラーで結果を動作しません。

答えて

1

https://cmake.org/cmake/help/v3.0/command/find_library.htmlをご覧ください。

cmakeの代替検索フォルダを指定して、ライブラリを探すことができます。また、OSのデフォルトのライブラリフォルダも表示されます。

find_library(YOURLIB 
     NAMES your // without the lib 
     PATHS ${CUSTOM_LIB_PATH}) 

その後、

target_link_library(targetname ${YOURLIB}) 
+0

これでライブラリをリンクすることができます。 'find_library'は' .dylib'接尾辞を追加してビルドをよりポータブルにします。 CMake変数の他に、ライブラリの場所のヒントとして環境変数を使用することもできます。特に、同じライブラリをマシン上の複数のプロジェクトで使用する必要がある場合は、非常に便利です。 CMakeの実行時にライブラリファイルが存在する必要があるので、このアプローチは依存する実行可能ファイルと同じビルドの一部としてライブラリがビルドされている場合は機能しません。 – ComicSansMS

0

Creating packages with CPackをお探しですか?これにより、プロジェクトをセットアップルーチンにどのようにパッケージ化するのか、インストール後のファイルレイアウトをどのように表示するかを記述できます。

関連する問題