C++ 为CMake find_包提供项目根目录

C++ 为CMake find_包提供项目根目录,c++,cmake,C++,Cmake,当通过CMake在Windows上编译项目时(假设它依赖于Boost库),您可以执行以下操作: 在项目源目录上运行CMake 它说它找不到Boost,但您可以指定实际的\u Boost\u ROOT作为缓存路径设置, 然后将拾取并设置BOOST\u ROOT,以便FIND\u PACKAGE(BOOST)可以找到 促进图书馆 我想对我自己的库Straph执行同样的操作,但由于某种原因,在我自己的FindStraph.cmake中,我无法提取Straph\u根变量: # Find Straph l

当通过CMake在Windows上编译项目时(假设它依赖于Boost库),您可以执行以下操作:

  • 在项目源目录上运行CMake
  • 它说它找不到Boost,但您可以指定
    实际的\u Boost\u ROOT
    作为
    缓存路径
    设置, 然后将拾取并设置
    BOOST\u ROOT
    ,以便
    FIND\u PACKAGE(BOOST)
    可以找到 促进图书馆
  • 我想对我自己的库Straph执行同样的操作,但由于某种原因,在我自己的
    FindStraph.cmake
    中,我无法提取
    Straph\u根变量:

    # Find Straph library
    #
    # Once done this will define:
    #    STRAPH_FOUND         - System has Straph
    #    STRAPH_INCLUDE_DIRS  - The Straph include directories
    #    STRAPH_LIBRARIES     - The libraries needed to use Straph
    
    find_path(STRAPH_INCLUDE_DIR straph/straph.h
        HINTS
        ${STRAPH_ROOT}/include
        ${STRAPH_ROOT}
    )
    
    find_library(STRAPH_LIBRARY NAMES straph libstraph
        HINTS
        ${STRAPH_ROOT}/lib
        ${STRAPH_ROOT}
    )
    
    set(STRAPH_LIBRARIES ${STRAPH_LIBRARY})
    set(STRAPH_INCLUDE_DIRS ${STRAPH_INCLUDE_DIR})
    
    include(FindPackageHandleStandardArgs)
    find_package_handle_standard_args(Straph DEFAULT_MSG STRAPH_LIBRARY STRAPH_INCLUDE_DIR)
    
    mark_as_advanced(STRAPH_INCLUDE_DIR STRAPH_LIBRARY)
    
    至少在我看来是这样的:在我的
    CMakeLists.txt
    中,我会这样做:

    SET(ACTUAL_STRAPH_ROOT CACHE PATH "Location of Straph library")
    IF(EXISTS ${ACTUAL_STRAPH_ROOT})
        SET(STRAPH_ROOT ${ACTUAL_STRAPH_ROOT})
    ENDIF()
    FIND_PACKAGE(Straph REQUIRED)
    INCLUDE_DIRECTORIES(${STRAPH_INCLUDE_DIRS})
    

    但它抱怨说,即使在我设置了
    ACTUAL\u STRAPH\u ROOT

    之后,它也找不到库。您的方法似乎有效,应该可以工作。将一些
    message
    调用添加到
    FindStraph
    以确保
    STRAPH\u ROOT
    具有正确的值。然后确保
    find.*
    命令正常工作,即您正在搜索的内容确实可以在您正在搜索的地方找到。谢谢,问题确实出在其他地方!哎呀-D