2016-05-30 65 views
0

我有一個名爲bitstream的自定義程序包,並且想要在上游項目中使用它。Cmake中的Find_path不起作用

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

所以我寫bitstreamConfig.cmake

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) 

,並在上游項目,我補充一下:

上游項目 src
SET(bitstream_DIR "${CMAKE_SOURCE_DIR}/bitstream") 
FIND_PACKAGE(bitstream) 
INCLUDE_DIRECTORIES(${BITSTREAM_INCLUDE_DIRS}) 

我補充一下:

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,但不一定)。因此,要麼使比特流包完全分離的項目或使其成爲您的項目的一部分,並使用cmake包括而不是查找包。 –

回答

0

你還沒有給find_path提供關於搜索文件的可能位置的任何提示。默認情況下,它僅在系統範圍的目錄中進行搜索,並且絕對不會查找比特流/

find_path documentation page描述了搜索算法,其中明確列出了所有可能的提示。

而且,你模塊配置模式find_package之間的混淆。

bitstreamConfig.cmake真正實現模塊模式:它使用查找項目find_*命令,並在年底進行最後的裁決要求find_package_handle_standard_args(包是否被發現或沒有)。

但命名*Config.cmake意味着配置模式,它(通常)填充所有變量與硬編碼值並自動成功。