Cmake中的Find_path不起作用

时间:2016-05-30 04:44:28

标签: c++ cmake

我有一个名为bitstream的自定义程序包,并希望在上游项目中使用它。

--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)

在上游项目中我添加:

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无法找到正确的路径,提前谢谢!

1 个答案:

答案 0 :(得分:1)

您尚未对find_path提供有关搜索文件的可能位置的任何提示。默认情况下,它仅在系统范围的dirs中搜索,并且绝对不会查看 bitstream /

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

此外,您对find_package模块配置模式感到困惑。

您的bitstreamConfig.cmake实际上实现了模块模式:它使用find_*命令查找项目并在最后调用find_package_handle_standard_args进行最终判决(是否找到包)或不)。

但是命名*Config.cmake意味着 config 模式,它(通常)用硬编码值填充所有变量并自动成功。