2013-06-20 16 views
7

私はインターネット上で検索してきましたが、私の質問に答えることができませんでした(または私は何を検索するのか分かりません)。CMakeプロジェクトで外部DLLを使用する方法

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

私は十分にはっきりしていたと思います。

答えて

9

まず、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を使用してプロジェクトを構成することができますが、インストールされたライブラリを見つけるための魔法の方法はありませんが、何も見つかりませんが、SIFTGPU_INCLUDE_DIRSIFTGPU_LIBRARYという2つのキャッシュ変数が作成されます。

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

サードパーティのライブラリごとに繰り返して、もう一度設定してコンパイルしてください。

+2

これは、.dllファイルがどこにあるかをcmakeに伝えますか?私は、静的なlibへのリンクだけを見て、ヘッダーファイルがどこにあるのかのヒントを提供します。 – EbbnFlow

+3

Cmakeは、dllファイルの場所を知る必要はありません。これらのファイルは、コンパイル時にバイナリを実行していないときにのみ必要です。 – Guillaume

関連する問題