问题描述
我有一个符合以下条件的 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
标志,因为这应该将搜索限制为 only在指定的路径中:
find_library(SRTP_LIBRARIES NAMES srtp2 required PATHS ${OPEN_SRC_INSTALL_LIB_PREFIX} NO_DEFAULT_PATH)
...仍然没有运气。
任何想法为什么这不起作用?我已经通过 OPEN_SRC_INSTALL_LIB_PREFIX
打印验证了 message()
是图书馆的有效目录。
请注意,这是交叉编译,尽管我不明白为什么这会改变 find_library()
的行为,除非我遗漏了 the documentation 中的某些内容
解决方法
首先要注意我在 cmake
17.5。
好的,所以文档有点混乱,但似乎 NO_DEFAULT_PATH
只会使用 PATHS
参数指定的路径,而不使用其他缓存变量,但是 如果设置了 CMAKE_SYSROOT
, 似乎不是这种情况。
使用 NO_CMAKE_FIND_ROOT_PATH
实际上会导致 find_library()
忽略缓存路径。