如何从源代码安装外部库以便 cmake 找到它?

How to install external library from source for cmake to find it?

假设我正在编写一个使用其他库 dependency_lib 的库 my_project。 我目前在开发过程中所做的是:我已经将依赖项的代码克隆到我的文件系统中一些正常的、人类可访问的目录中。我已经根据其开发人员的说明构建了该库,现在我在该目录的某处有一个共享库 dependency_lib.so。 然后在我的 CMakeLists.txt 我有:

find_library(DEPENDENCY_LIB dependency_lib HINTS /home/my_name/Documents/path/to/the/built/dependency/lib)
target_link_libraries(my_project PRIVATE ${DEPENDENCY_LIB})

这对我来说非常有用,但显然当其他人克隆我的代码并尝试构建它时,他们将在他们系统的其他位置拥有该外部库,因此这对他们不起作用。

  1. 是否有一些标准位置可以将构建的库放入 cmake 中以找到它们,我可以假设其他开发人员也将他们的构建库放入其中?
  2. 我期望我的库的其他 developers/users 也克隆依赖项的源代码并构建它是否合理,或者对于 C++ 的外部依赖项是否有其他解决方案? 非常感谢任何关于使用 cmake 进行依赖管理的评论、解释和资源。

额外问题:为什么这不能像 Python 和 pip、Rust 和 cargo 或 JavaScript 和 npm 一样简单?

大多数情况下,开发人员会添加SDKs 文件夹以供其他人使用所需的SDK。可能是因为他们在库中做了 minor/major 更改,它变成了一个自定义构建版本,对他们来说是特别的。所以,这意味着,他们必须将它打包到项目中,因为其他人找不到该库的修改版本。我认为,这就是您要寻找的:

find_package(Library ${LIB_VERSION} EXACT REQUIRED PATHS "${LIB_DIR}")

通过声明 PATHS,您可以 CMake 查找特定于库的目录。