CMake 在错误的路径上查找库

Posted

技术标签:

【中文标题】CMake 在错误的路径上查找库【英文标题】:CMake Finding Libraries on Wrong Path 【发布时间】:2012-03-20 23:56:39 【问题描述】:

我正在尝试使用 CMake 来使用本地 32 位版本的 cURL,而不是安装的 64 位版本。当我使用 CMake 命令find_library 时,它仍然返回/usr/lib/x86_64-linux-gnu/libcurl.so 的路径。我试过使用标志 NO_DEFAULT_PATH 和 NO_SYSTEM_ENVIRONMENT_PATH 但仍然不能强制它首先在本地查看。我的代码如下:

    find_library(MYCURL NAMES libcurl 
                    HINTS $MY_CURL_DIR
                    NO_SYSTEM_ENVIRONMENT_PATH
                    NO_DEFAULT_PATH)

我已经指定(并验证)$MY_CURL_DIR 正在寻找正确的位置。有什么想法吗?

【问题讨论】:

【参考方案1】:

您是否要在两次尝试之间删除您的CMakeCache.txt?或者更具体地说,CMakeCache.txt 中的 MYCURL 条目。 (这个文件应该存在于你调用 CMake 的目录中)。

如果find_library 成功找到库,CMake 的进一步执行不会重试查找相同的库。

在您的命令中,NO_SYSTEM_ENVIRONMENT_PATH 选项是多余的 - NO_DEFAULT_PATH 会停止搜索除 $MY_CURL_DIR 之外的任何路径。

另外,您可能不想搜索“libcurl”,只需搜索“curl”即可。 CMake 在 UNIX 系统上为您添加“lib”。欲了解更多信息,请运行cmake --help-variable CMAKE_FIND_LIBRARY_PREFIXES

如果您想更改find_library 的默认缓存行为并在每次运行CMake 时强制搜索,请先使用unset

unset(MYCURL CACHE)
find_library(MYCURL NAMES curl HINTS $MY_CURL_DIR NO_DEFAULT_PATH)

【讨论】:

以上是关于CMake 在错误的路径上查找库的主要内容,如果未能解决你的问题,请参考以下文章

CMake Pkg-Config 库链接路径

在 Windows 上使用带有 CMake 的 HDF5 库(错误:“找不到 HDF5”)

CMake 路径中的错误

CMake 找不到诅咒

Android NDK 开发CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )

Android NDK 开发CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )