【问题标题】:CMake set start path for FIND_PACKAGE?CMake 为 FIND_PACKAGE 设置起始路径?
【发布时间】:2016-02-22 05:35:28
【问题描述】:

我正在使用通过 Homebrew 在我的 Mac 上安装的较新版本的 openssl,我想知道是否有办法为 CMAKE 的 FIND_PACKAGE 函数设置启动路径?现在,当我尝试使用 FIND_PACKAGE 时,CMAKE 会找到我的操作系统使用的旧版本的 openssl。我目前在我的 CMakeLists.txt 中使用它

SET(OPENSSL_LIB_DIR /usr/local/Cellar/openssl/1.0.2f/lib)
INCLUDE_DIRECTORIES(/usr/local/Cellar/openssl/1.0.2f/include)
TARGET_LINK_LIBRARIES(mangaMe ${OPENSSL_LIB_DIR}/libcrypto.dylib ${OPENSSL_LIB_DIR}/libssl.dylib)

我遇到的唯一问题是,如果我的 openssl 更新,我必须手动更新路径中的版本。我已尝试阅读 CMAKE FIND_PACKAGE 文档,但不确定我将使用许多 PATH 变量中的哪一个来获得我正在寻找的效果。

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    您可以将OPENSSL_ROOT_DIR cmake 变量或OPENSSL_ROOT_DIR env 变量设置为以下路径:/usr/local/Cellar/openssl/*,然后使用find_package。示例:

    set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/*)
    find_package(OpenSSL REQUIRED)
    include_directories(${OPENSSL_INCLUDE_DIR})
    add_executable(${PROJECT_NAME} main.cpp)
    target_link_libraries(${PROJECT_NAME} ${OPENSSL_LIBRARIES})
    

    【讨论】:

    • 适用于查找我需要链接的库,但由于某种原因,它没有找到我需要的包含文件。收到此错误/usr/local/include/boost/asio/ssl/detail/openssl_types.hpp:19:10:致命错误:找不到“openssl/conf.h”文件#include ^ 1产生错误。
    • @Jem4687,显示以下命令的输出:message("OPENSSL_INCLUDE_DIR: " ${OPENSSL_INCLUDE_DIR})
    • 另一个快速问题。当包含目录时,Boost 和我正在使用的另一个包如何使用名称 BOOST_INCLUDE_DIRS 或 BOOST_INCLUDE_DIR 但对于 OpenSSL,我必须使用 OpenSSL_INCLUDE_DIR?
    • @Jem4687,找到您安装 cmake 的位置并在那里搜索 Modules 子文件夹。除了许多其他文件外,您还可以在那里找到FindOpenSSL.cmake 和FindBoost.cmake 文件。您可以查看内部并找出这个或那个用于包查找的模块有哪些输入和输出变量。
    • @Jem4687,或者你可以用谷歌搜索FindXXX.cmake,如果cmake有一个文件,它会指向文档,或者作为奖励,它会为包cmake找到一个cmake文件没有模块为。
    【解决方案2】:

    您可以在调用 FindOpenSSL 之前使用OPENSSL_ROOT_DIR:

    set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/1.0.2f/)
    include(FindOpenSSL)
    

    【讨论】:

    • 这仍然需要我指定 openssl 的确切版本,这是我试图避免的。
    • 伙计,include(FindOpenSSL) 正是我所需要的。为什么这不仅仅是 find_package 的一部分? Cmake...如此接近...但到目前为止...
    【解决方案3】:

    Cmake 带有 FindOpenSSL.cmake 模块,该模块在搜索 openssl 库时使用 OPENSSL_ROOT_DIR 变量。 最好使用该接口,因为它可以处理版本(major.minor、patch)和其他相关的库 hadling 等。

    您可以在调用 cmake 时通过命令行使用它,也可以像其他人指出的那样在源代码中设置它。

    cmake -DOPENSSL_ROOT_DIR=/path/to/openssl ....

    一般来说,如果你想找到没有提供默认 cmake 模块的其他库,你可以使用

    HINTS、PATHS、PATH_SUFFIXES 和其他变量,如 NO_DEFAULT_PATH(和其他 NO_*)告诉 cmake 不要查看标准路径。

    PATH = path to the location of library
    #this makes sense when PATH is pointed to the 'root' of the package location
    # for examle,path=/usr path_suffix=lib64 lib32 lib
    PATH_SUFFIXES = lib lib64 lib32  
    NO_DEFAULT_PATH # Only look in above PATHs and nowhere else.
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2018-11-18
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多