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
。
我试图找到一个问题,为什么 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
更新 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
。