CMake 找不到包含/库

usr*_*567 5 cmake

我想在使用 CMake 的项目中使用一些第三方标头(或库)。但它找不到标头(库)。为什么CMake找不到它?

usr*_*567 4

CMake 的查找例程在某些特定位置查找标头和库。这包括PATH变量以及已安装软件(例如许多 Linux)的默认位置/usr/bin。此外,它还会评估 CMake 变量CMAKE_PREFIX_PATH

您有两种方法可以帮助 CMake 找到所需的文件:

  1. 检查您的软件是否安装正确。对于自编译软件,通常由make install或类似的方法完成。如果您使用软件包(RPM 或 deb),它们通常已安装并且可以通过变量找到PATH

  2. 如果您不想或无法安装该软件,请将其路径添加到CMAKE_PREFIX_PATH变量中。将其传递给 CMake 调用cmake -DCMAKE_PREFIX_PATH=/path/to/software ..或在 CMake-GUI 中编辑/添加相应字段。

您必须删除CMakeCache.txt,否则 CMake 将找不到该库,因为它不检查而是使用缓存的结果。重新运行 CMake,它应该可以工作。

评估顺序

如果您的系统上有多个版本的库,请将您想要使用的版本添加到 中,CMAKE_PREFIX_PATH因为变量会在系统路径变量之前评估。

模块特定变量

某些模块提供特定变量,例如mylib_DIRmylib_ROOT来指示搜索路径。不鼓励使用它,它们仅用于向后兼容。新模块没有这些模块,并且添加此类变量的提交会被 CMake 开发人员拒绝。

文档

有关 CMake 如何搜索文件以及顺序的更多详细信息,请参阅文档:https://cmake.org/cmake/help/latest/command/find_library.html