【CMake】vcpkg + CMake

除了Conan外,vcpkg也是不错的C++包管理工具。跟conan相比,vcpkg是源码级的包管理,安装包的时候同时在本地编译。

安装vcpkg

vcpkg支持众多架构,有 arm-uwp arm-windows arm64-uwp arm64-windows x64-linux x64-osx x64-uwp x64-windows x64-windows-static x86-uwp x86-windows x86-windows-static 。 下面我已curl包为事例,介绍vcpkg的安装和使用。

# 下载vcpkg项目 git clone https://github.com/Microsoft/vcpkg.git cd vcpkg # 本地编译 . \ bootstrap-vcpkg.bat # 安装指定的包,curl包分号后面的表示架构,可用的值为之前列出的那些。 vcpkg install curl:x64-windows # 已安装的包更新 vcpkg upgrade # 列出已经安装的包 vcpkg list # 删除已安装的包 vcpkg remove curl:x64-windows # 为每一个用户设置 vcpkg integrate install # 为当前项目配置,这里需要在该项目的目录下拥有一份vcpkg的拷贝 vcpkg integrate project

默认32位

vcpkg install gtest
vcpkg install benchmark

在CMake中使用vcpkg

cmake_minimum_required(VERSION 3.5)
# 设置VCPKG_ROOT所在的位置
set(VCPKG_ROOT "${CMAKE_SOURCE_DIR}/../vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE PATH "")
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})
project(TEST_NOW)
find_package(GTest CONFIG REQUIRED)
find_package(benchmark CONFIG REQUIRED)
add_subdirectory(string_test)

增加依赖库

target_link_libraries(string_test PRIVATE GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)
target_link_libraries(string_test PRIVATE benchmark::benchmark benchmark::benchmark_main)

代码中可以直接使用benchmark:

#include <string>
#include <benchmark/benchmark.h>
static void BM_STRING(benchmark::State& state)
    for (auto _ : state) {
        for (int ii = 0; ii < 1000000; ++ii)
            std::string x("https://blog.csdn.net/mythma");
            x.c_str();
BENCHMARK(BM_STRING);
BENCHMARK_MAIN();

vcpkg使用中的常见问题

vcpkg和cmake合作使用时,明明CMakefile编写正确,但是却一直找不到第三方引用呢?
面对这种情况需要从以下几个方面去排查。

  • 第一,CMAKE_TOOLCHAIN_FILE是否设置为了vcpkg.cmake文件路径了?如果设置了的话,是否是在project()命令之前,因为如果在project命令之后的话就无效了。
  • 第二,对vcpkg.cmake预设好的变量是否进行了覆盖操作?我之前就放过错误,将vcpkg.cmake中预设的变量CMAKE_PREFIX_PATH覆盖,结果导致无法引入第三方包的问题

vcpkg使用详解

vcpkg + CMake

【CMake】vcpkg + CMake除了Conan外,vcpkg也是不错的C++包管理工具。跟conan相比,vcpkg是源码级的包管理,安装包的时候同时在本地编译。安装vcpkggit clone https://github.com/Microsoft/vcpkg.gitcd vcpkg #编译.\bootstrap-vcpkg.bat #集成vcpkg integrate install安装包默认32位vcpkg install gtestvcpkg install 使用vcpkgCMake (使用CMakeLists.txt或CMakeSettings.json )构建C ++软件。 提供的示例使用自托管或Microsoft托管代理,还使用Docker和管道缓存。 强烈建议将vcpkg用作子模块。 在下面的示例中,其中vcpkg是一个Git子模块: # Sample when vcpkg is a submodule # Cache/Restore the vcpkg's build artifac
在WIN10下生成.sln出现如下错误: Cmake Error at builders/vpx.cmake:89 Cmake Error at builders/vpx.cmake:88 Cmake Error at builders/vpx.cmake:87 Cmake Error at builders/vpx.cmake:77 file not found WORK/desktop/cmake/windowsenv_libpath.txt WORK/desktop/cmake/windowsenv_lib.txt WORK/desktop/cmake/windowsenv_include.txt WORK/desktop/cmake/windowsenv_path.txt ,下载文件,解压,在linphone-deskto搜索该文件,覆盖原文件。然后清除原来生成的:Python prepare.py -c,再Python prepare.py
vcpkg :two_hearts: CMake集成 系好安全带,抬起脚来: 在对project(...)调用之前添加include(vcpkg.cmake) [在顶级CMakeListst.txt ] 在您的项目中有vcpkg.json清单? 是:完成! :rocket: 否:通过调用vcpkg_add_package(<pkg>)添加软件包 完毕! :rocket: # EXAMPLE set (VCPKG_VERSION edge) # optional include (vcpkg.cmake) project (awesome-project) # without 'vcpkg.json'-manifest vcpkg_add_package(fmt) 它有什么作用? 获取vcpkg 如果需要,构建vcpkg vcpkg本身的“数字”或语义版本控制 将vcpkg中的musl-libc屏蔽
CMakeCMake中使用vcpkg vcpkg是一个微软开源的C++包管理器。 在以前的开发中,如果在项目中需要使用某个开源库,例如qt,我们需要取官网下载qt的源码,然后构建得到对应的库,然后在项目中链接这个库。对于自己熟悉的库还好说,若是不熟悉的库,如何拉取源码?如何构建?如何在项目中引用?等等这些问题通常会困扰我们,然而,大多数情况下,我们只是使用这个开源库,并不需要关心这个库的构建和编译等问题。如此,在以前的开发过程中,往往会花费不少的时间在引入开源库上。 vcpkg是在背景下开发出来的,通过
vscode-vcpkg-模板 为了获得更好的软件包管理体验(如npm ,我们使用vcpkgCMakevcpkg也可以生成Visual Studio项目文件。 为了获得更好的编码和智能体验,我们使用VSCode。 VSCode也比Visual Studio快得多。 安装依赖项 所有依赖项都应在中定义,有关更多信息,请参见 。 git clone --recurse-submodules https://github.com/upupming/vscode-qt-cmake-vcpkg-template.git . \v cpkg \b ootstrap-vcpkg.bat # install manually (optional, vcpkg can install dependencies automatically when configuring project)
在使用此操作之前,请考虑编写纯工作流程! 在使用此操作之前,请考虑阅读和学习如何直接使用可在自己的计算机上运行的众所周知的工具编写工作流,而不必依赖于无法在开发计算机上运行的GitHub操作。 您可以在此问题中阅读有关此内容的更多信息: : 通过在GitHub工作流程上运行 ,使用多平台run-cmake动作构建C ++软件。 提供的使用和 。 好的伴侣是操作和操作。 开发人员手册 强烈建议同时使用和清单文件来声明性地指定依赖项。 # Sample when vcpkg is a submodule of your repository (highly recommend
有关如何使用vcpkg及其( vcpkg.json )实验功能设置CMake项目的示例 使用--recurse-submodules标志克隆--recurse-submodules git clone --recurse-submodules https://github.com/miredirex/cmake-vcpkg-example.git 运行./vcpkg/bootstrap-vcpkg.sh或.\vcpkg\bootstrap-vcpkg.bat 获取依赖项(请参阅 ): (这是可选的,无论如何CMake都应该运行vcpkg install ) ./vcpkg/vcpkg --feature-flags=manifests install 使用您选择的IDE /构建工具或手动构建项目: cmake -B build -S . 1.vckpkg简介: Vcpkg helps you manage C and C++ libraries on Windows, Linux and MacOS. This tool and ecosystem are constantly evolving; your involvement is vital to its success! Vcpk... Vcpkg是可用于Windows,linux和MacOS上跨平台的C/C++库管理工具,是一款开源工具。 使用vcpkg help或者vcpkg help[comment]可以获取特定命令的命令帮助。前提是安装好vcpkgGitHub:https://github.com/microsoft/vcpkg 条件(Windows): 前提条件: 1、 windows7及以上系统 2、 Git 3、 Visual Studio 2015及以上版本 安装Visual Studio与Git: 假设你已经有
应该如何使用vcpkg 提供的库呢,vcpkg提供2种使用方式,一种是在CMake 工程使用,另一种是在MSbuild 工程使用,我们分别提供了示例。 如何在CMake 工程中使用?示例:sqlite3 第一步: 安装库 PS E:\vcpkg\clean\vcpkg> ./vcpkg install sqlite3:x64-windows Computing installation plan... The following packages will be built and ins
VS2017是Microsoft Visual Studio 2017开发工具,可用于创建和维护应用程序和网站等。PCL(Point Cloud Library)是一个用于3D点云处理和分析的开源C ++库。CMake是用于构建和管理C ++项目的跨平台工具。 在使用VS2017进行PCL开发时,可以使用PCL预编译版本和PCL配置工具,使PCL库能够与VS2017集成。但是,如果需要进行自定义配置,则需要使用CMake并手动将其与VS2017集成。 使用CMake的好处在于它可以自动生成Windows、Linux和MacOSX等多个平台的构建文件,并且可以自动处理依赖项。因此,CMake可以减少构建和部署过程中的繁琐和错误,并促进团队协作和代码可移植性。 总的来说,VS2017是一个功能强大的开发工具,可以与PCL库集成,但如果需要进行复杂的构建和部署,则应考虑使用CMake