2016-05-30 13 views
0

bitstreamというカスタムパッケージがあり、上流のプロジェクトで使用したいと思います。CmakeのFind_pathが機能しません

find_path(BITSTREAM_INCLUDE_DIR NAMES bitstream.hpp) 
MESSAGE(STATUS "bitstream_include_dir: ${BITSTREAM_INCLUDE_DIR}") 
find_library(BITSTREAM_LIBRARY NAMES bitstream) 
MESSAGE(STATUS "BITSTREAM_LIBRARY: ${BITSTREAM_LIBRARY}") 

include(FindPackageHandleStandardArgs) 
find_package_handle_standard_args(BITSTREAM REQUIRED_VARS BITSTREAM_LIBRARY BITSTREAM_INCLUDE_DIR) 

if(BITSTREAM_FOUND) 
    set(BITSTREAM_LIBRARIES ${BITSTREAM_LIBRARY}) 
    set(BITSTREAM_INCLUDE_DIRS ${BITSTREAM_INCLUDE_DIR}) 
endif() 

mark_as_advanced(BITSTREAM_INCLUDE_DIR BITSTREAM_LIBRARY) 

と上流のプロジェクトに私が追加::

--upstreamProject 
| 
|--src 
    |-- ...(many .cpp) 
    |--CmakeLists.txt 
|--include 
    |-- ... (..many .hpp) 
|--bitstream 
    |--CMakeLists.txt 
    |--bitstreamConfig.cmake 
    |--src 
     |-- bitstream.cpp 
    |--include 
     |-- bitstream.hpp 

は、だから私はbitstreamConfig.cmake書く

SET(bitstream_DIR "${CMAKE_SOURCE_DIR}/bitstream") 
FIND_PACKAGE(bitstream) 
INCLUDE_DIRECTORIES(${BITSTREAM_INCLUDE_DIRS}) 

上流プロジェクトsrcに私が追加:

TARGET_LINK_LIBRARIES(${...} ${BITSTREAM_LIBRARIES}) 

が、実行をcmakeは、私が得たこと:

-- bitstream_include_dir: BITSTREAM_INCLUDE_DIR-NOTFOUND 
-- BITSTREAM_LIBRARY: BITSTREAM_LIBRARY-NOTFOUND 
-- Could NOT find BITSTREAM (missing: BITSTREAM_LIBRARY BITSTREAM_INCLUDE_DIR) 

cmakeのは、事前に、感謝を正しいパスを見つけることができない理由を教えてください!

+0

私はcmakeをこの方法で使用しません。 cmake 'package finding'コマンドは、外部のパッケージ(他の人がコンパイルしたパッケージ - 必ずしもそうではないが、cmakeも使用する可能性があります)を見つけることを意図しています。したがって、そのビットストリームパッケージを完全に分離されたプロジェクトにするか、それをプロジェクトの一部にして、findパッケージの代わりにcmakeインクルードを使用します。 –

答えて

0

検索したファイルの可能な場所については、find_pathには何のヒントもありません。デフォルトでは、システム全体のディレクトリだけを検索し、確かにビットストリーム/を調べません。

find_path documentation pageには、すべての可能なヒントが明示的にリストされている検索アルゴリズムが記述されています。

また、あなたはモジュール設定find_packageモードの間で混乱しています。

あなた bitstreamConfig.cmake実際に実装し モジュールモード:それはアイテムを見つけるための find_*コマンドを使用し、(パッケージが見つからているかどうか)、最終的な評決のために最後に find_package_handle_standard_argsを呼び出します。

しかし*Config.cmakeの命名は、ハードコードされた値で、すべての変数を満たし、自動的に成功する(通常は)設定モードを意味します。

関連する問題