web-dev-qa-db-ja.com

CMakeプロジェクトで外部DLLを使用する方法

私はインターネットで検索してきましたが、質問に答えられるものを見つけることができませんでした(または何を検索すればよいかわかりません)。

とにかく、ここに私の問題があります。CMakeプロジェクトでサードパーティライブラリ(.dllファイル)を使用したいと思います。含めたいライブラリ( https://github.com/pitzer/SiftGP )はオープンソースであり、使用したいバイナリでも利用でき、ビルドツールとしてCMakeも使用します関連。

私は十分に明確であったと思います。

15
mitjap

まず、CMakeLists.txtを編集して、サードパーティのライブラリを含めます。ヘッダーファイルへのパスとリンクするライブラリファイルの2つが必要です。例えば:

# searching for include directory
find_path(SIFTGPU_INCLUDE_DIR siftgpu.h)

# searching for library file
find_library(SIFTGPU_LIBRARY siftgpu)

if (SIFTGPU_INCLUDE_DIR AND SIFTGPU_LIBRARY)
    # you may need that if further action in your CMakeLists.txt depends
    # on detecting your library
    set(SIFTGPU_FOUND TRUE)

    # you may need that if you want to conditionally compile some parts
    # of your code depending on library availability
    add_definitions(-DHAVE_LIBSIFTGPU=1)

    # those two, you really need
    include_directories(${SIFTGPU_INCLUDE_DIR})
    set(YOUR_LIBRARIES ${YOUR_LIBRARIES} ${SIFTGPU_LIBRARY})
endif ()

次に、他のライブラリーについても同じことができ、すべてのライブラリーが検出されたら、ターゲットにリンクします。

target_link_libraries(yourtarget ${YOUR_LIBRARIES})

その後、CMakeを使用してプロジェクトを構成できますが、インストールされたライブラリを見つける魔法の方法がないため、何も見つかりませんが、2つのキャッシュ変数が作成されます:SIFTGPU_INCLUDE_DIRおよびSIFTGPU_LIBRARY

CMake GUIを使用してSIFTGPU_INCLUDE_DIRはヘッダーファイルを含むディレクトリを指し、SIFTGPU_LIBRARYから.libサードパーティライブラリのファイル。

サードパーティのライブラリごとに繰り返し、再度構成してコンパイルします。

13
Guillaume