【问题标题】:cmake find_library() not finding library specified by PATHScmake find_library()找不到PATHS指定的库
【发布时间】:2021-07-11 19:20:33
【问题描述】:

我有一个与下面匹配的find_library() 语句(这是基于amazon kinesis project):

find_library(SRTP_LIBRARIES NAMES srtp2 REQUIRED PATHS ${OPEN_SRC_INSTALL_LIB_PREFIX})

OPEN_SRC_INSTALL_LIB_PREFIX 正确指向该库所在的位置。我可以直接观察到这一点。但是,这个find_library() 调用失败了,我很困惑为什么会这样做。

我认为也许 cmake 会先搜索其他路径并忽略我指定的路径,所以我也尝试使用 NO_DEFAULT_PATH 标志,因为这应该将搜索限制为在指定路径:

find_library(SRTP_LIBRARIES NAMES srtp2 REQUIRED PATHS ${OPEN_SRC_INSTALL_LIB_PREFIX} NO_DEFAULT_PATH)

...仍然没有运气。

任何想法为什么这不起作用?我已经通过message() 打印验证了OPEN_SRC_INSTALL_LIB_PREFIX 是库的有效目录。

请注意这是交叉编译,尽管我不明白为什么这会改变find_library() 的行为,除非我遗漏了the documentation 中的某些内容

【问题讨论】:

  • --debug-find 选项添加到cmake 并检查与您的find_library 调用对应的输出。它应该打印出哪些路径被实际搜索,哪些路径被忽略。
  • 好提示@Tsyvarev,我现在看到它实际上根本没有使用我传入的路径......关于为什么会这样的任何想法?是否正在进行某种缓存?它似乎正在使用 SYSROOT 路径,然后在我指定 NO_DEFAULT_PATH 时不使用任何路径(即使 PATHS 已定义且有效)
  • The CMAKE_SYSROOT variable can also be used to specify exactly one directory to use as a prefix. Setting CMAKE_SYSROOT also has other effects. See the documentation for that variable for more.
  • 我猜这就是困扰我的原因

标签: cmake cmake-language


【解决方案1】:

首先要注意我在cmake 17.5。

好的,所以文档有点混乱,但似乎NO_DEFAULT_PATH 只会使用PATHS 参数指定的路径,而不使用其他缓存变量,但 不 如果设置了CMAKE_SYSROOT,似乎就是这种情况。

使用NO_CMAKE_FIND_ROOT_PATH 是真正导致find_library() 忽略缓存路径的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多