如何从源代码安装外部库以便 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})
这对我来说非常有用,但显然当其他人克隆我的代码并尝试构建它时,他们将在他们系统的其他位置拥有该外部库,因此这对他们不起作用。
- 是否有一些标准位置可以将构建的库放入 cmake 中以找到它们,我可以假设其他开发人员也将他们的构建库放入其中?
- 我期望我的库的其他 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
查找特定于库的目录。
假设我正在编写一个使用其他库 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})
这对我来说非常有用,但显然当其他人克隆我的代码并尝试构建它时,他们将在他们系统的其他位置拥有该外部库,因此这对他们不起作用。
- 是否有一些标准位置可以将构建的库放入 cmake 中以找到它们,我可以假设其他开发人员也将他们的构建库放入其中?
- 我期望我的库的其他 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
查找特定于库的目录。