Cmake问题:如何使用vcpkg自动安装依赖项?

3
我正在Linux机器上开发C++项目,并使用了几个boost库。我已经使用vcpkg在我的系统上安装了它们,并使用vcpkg提供的工具链构建了它。我的问题是: 如何定义依赖项,以便在不同的系统上自动安装它们,如果他们要构建它? Conan有一种方法可以通过在conanfile.txt中定义依赖项来实现。我该如何在vcpkg中做到这一点?
编辑1:我找到了autovcpkg,它可以完成我要做的工作,但是是否可以在cmakelists.txt或vcpkg本身内部原生地完成相同的操作?

据我所知,CMake 没有内置的方法来完成这个任务。不过,autovcpkg 似乎是一个很好的选择。它可以自动为您完成您需要通过 CMake 手动完成的工作。 - Developer Paul
谢谢您让我知道。在 vcpkg 中是否存在与以下功能相关的 PR 或问题? - aks
你的意思是自动构建依赖关系吗?不,我认为这超出了vcpkg试图完成的范围。如果你正在使用Windows系统,目前最好的方法是使用vcpkg integrate命令将库在全局范围内可用,但我觉得这违反了使用cmake的理念,因为它旨在跨平台使用。 - Developer Paul
我想要类似于Conan在conanfile.txt中所做的事情。 - aks
2个回答

2
如果你的项目中有vcpkg作为一个子模块,并且想要让vcpkg构建你需要的库,同时使用vcpkg CMake工具链,请定义一个清单文件。这样做的好处是,你的用户不需要自己安装vcpkg,CMake工具链会代表你安装它。同时还可以帮助你固定包版本。 使用清单文件是通过编程的方式告诉vcpkg在CMake配置阶段获取和构建哪些包。 使用CMake工具链文件是将此功能与你项目的构建系统捆绑在一起的唯一方法。
$ git clone .../my_project
$ cd ./my_project
$ git submodule update --init
$ mkdir ../build
$ cd ../build
$ cmake ../my_project
-- Running vcpkg install
-- Running vcpkg install - done
...

2
我发现了 autovcpkg,它可以完成我想要做的工作,但是是否可以在 cmakelists.txt 或 vcpkg 本身内部本地执行相同的操作? 您可以通过提供 CONTROL 和 portfile.cmake 文件来为您的库或可执行文件编写 vcpkg 端口。在 CONTROL 文件中,您定义所有依赖项和可能的特性,而 portfile 包含构建指令。您可以使用 "vcpkg create " 来创建 CONTROL 和 portfile.cmake,从而根据您的需求自定义模板。 与端口覆盖一起,其他人也可以使用此端口,而无需将其合并到 vcpkg/master 中。

请提供如何完成此操作的文档链接。 - jvh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接