cmake find_path 不适用于简单文件

cmake find_path not working for simple file

我试图找到一个问题,为什么 cmake 找不到自定义的 openssl 版本,因此我调试了原来的 findOpenssl.cmake。

他们在那里搜索 ssl.h 文件。因此,我创建了一个小的 cmake 文件,试图找出问题所在:

project(CMAKETEST)
cmake_minimum_required(VERSION 3.16)

set(OPENSSL_CUSTOM_PATH "/home/user/Documents/CMakeTest/openssl/include/openssl/ssl.h")
message(STATUS CUSTOMOPENSSLPATH: ${OPENSSL_CUSTOM_PATH})

find_path(TEST123
    NAMES ${OPENSSL_CUSTOM_PATH}
)

message(STATUS ${TEST123})

我在上面的文件夹中创建了一个空的 ssl.h 文件,但是 cmake 找不到该文件。 TEST123 始终未找到。

解决方案:

set(OPENSSL_CUSTOM_PATH "/home/user/Documents/CMakeTest/openssl/include/openssl")
find_path(TEST123 NAMES ssl.h PATHS "${OPENSSL_CUSTOM_PATH}")

更新

这个更具体的例子没有按预期工作:

project(CMAKETEST)
cmake_minimum_required(VERSION 3.16)

set(OPENSSL_CUSTOM_PATH "/home/user/Documents/CMakeTest/openssl/")
find_path(TEST123
    NAMES openssl/ssl.h HINTS "${OPENSSL_CUSTOM_PATH}"
    PATH_SUFFIX include
    NO_DEFAULT_PATH
)

message(STATUS ${TEST123})

当删除 NO_DEFAULT_PATH 时,它会在 /usr/include

中找到系统 openssl 库

更新 2

https://github.com/Kitware/CMake/blob/master/Modules/FindOpenSSL.cmake#L195-L204

find_path(OPENSSL_INCLUDE_DIR
  NAMES
    openssl/ssl.h
  ${_OPENSSL_ROOT_HINTS_AND_PATHS}
  HINTS
    ${_OPENSSL_INCLUDEDIR}
    ${_OPENSSL_INCLUDE_DIRS}
  PATH_SUFFIXES
    include
)

首先找到 /usr/include 中的路径,如果我添加 NO_DEFAULT_PATH 它会找到它。可能是因为我写这个问题的时候没有找到一些缓存。

因为你使用不当,所以没用,你的情况应该是这样的:

set(OPENSSL_CUSTOM_PATH "/home/user/Documents/CMakeTest/openssl/include/openssl")
find_path(TEST123 NAMES ssl.h PATHS "${OPENSSL_CUSTOM_PATH}")

或者干脆 find_path(TEST123 ssl.h PATHS "${OPENSSL_CUSTOM_PATH}")


在您的更新中有一个错误 PATH_SUFFIX 应该是 PATH_SUFFIXES