如何使用CMake安装依赖项? 我一直在试图找出处理C++项目中依赖关系的最佳方法。对于较小的库,如fmt,仅添加以下内容并不太困难: include(FetchContent) FetchContent_Declare(FormatLib GIT_REPOSITORY "https://github.com/..." GIT_TAG "..." ) FetchContent_MakeAvailable(FormatLib)

如何使用CMake安装依赖项? 我一直在试图找出处理C++项目中依赖关系的最佳方法。对于较小的库,如fmt,仅添加以下内容并不太困难: include(FetchContent) FetchContent_Declare(FormatLib GIT_REPOSITORY "https://github.com/..." GIT_TAG "..." ) FetchContent_MakeAvailable(FormatLib),c++,cmake,libraries,dependency-management,package-managers,C++,Cmake,Libraries,Dependency Management,Package Managers,但是,不希望每次都将项目下载到具有较大依赖项的构建目录中,例如依赖于其他内容的Vulkan加载程序。 我想要的是能够在我的主要项目之前或配置时,下载、配置、构建和安装一个系统范围的库。我不知道这是否是一个功能与CMake可能,但任何帮助将不胜感激 我还知道,ExternalProject模块在CMake中已经存在很长时间了,我认为它非常适合我想要的东西。。。如果我能够使用它安装一个库,然后在同一个CMakeLists.txt 我购买并阅读了大量的“专业CMake第8版”,但仍然不知道CMake中

但是,不希望每次都将项目下载到具有较大依赖项的构建目录中,例如依赖于其他内容的Vulkan加载程序。 我想要的是能够在我的主要项目之前或配置时,下载、配置、构建和安装一个系统范围的库。我不知道这是否是一个功能与CMake可能,但任何帮助将不胜感激

我还知道,
ExternalProject
模块在CMake中已经存在很长时间了,我认为它非常适合我想要的东西。。。如果我能够使用它安装一个库,然后在同一个
CMakeLists.txt

我购买并阅读了大量的“专业CMake第8版”,但仍然不知道CMake中是否存在这样的功能或技术

我应该澄清我不需要Vulkan装载机,我只是举个例子。对于Vulkan加载程序,如果已经安装了SDK,则可以使用内置的
find_package
命令。我的问题是,是否有一种方法可以提前填充这样一个库。有一些特定的库我在使用像Conan这样的包管理器时找不到,似乎最好的解决方案是直接从在线git repo、构建和安装中获取源代码

总之,我想做的是:编写一个CMakeLists.txt,详细说明项目的所有依赖项,可能使用
find_package
搜索依赖项,如果找不到,它会在系统范围内安装它们,以便从那里开始,系统上所述项目或类似项目的每个版本都可以访问安装的软件包

任何关于如何缓解此问题的建议、见解或建议,甚至我所期望的开发策略有何缺陷,我们都将不胜感激。

我想,“系统范围安装”不是CMake应该做的。我希望将一个库包装成一个成熟的Conan/VCPKG/任何包,可能只在本地分发。难道“系统范围安装”不是核心功能集的一部分吗?实际上有一个
install
命令,允许在任何位置安装库,使用CMAKE_install_前缀,在Linux上默认为
/usr/local
,在Windows上默认为
c:/Program Files