内容提要
vcpkg是免费开源的C/C++包管理器,由微软和C++社区维护。使用vcpkg和CMake,Askia公司能够减少构建依赖的时间,减少代码大小约30万行。转向vcpkg还能确保一致和可重复的构建,访问大量库,简化入职流程,并标准化微服务的使用。
延伸解读
从30人到90人:vcpkg如何支撑团队快速扩张
Askia被Ipsos收购后,团队在两年内从30人扩展到90人。为了应对快速扩张,他们需要简化新成员的入职流程。通过采用vcpkg和CMake,新开发者只需安装Visual Studio、ODBC驱动、克隆vcpkg并创建GitHub令牌,就能在半天内完成环境搭建,并克隆、编译和调试所有C++项目。这种标准化工具链显著降低了入职门槛,使团队能够高效扩展。
二进制缓存:节省CI时间与成本的关键
Askia利用vcpkg的二进制缓存功能,将GitHub作为NuGet服务器,实现开发者和CI共享缓存。每个构建要么下载缓存,要么构建并上传结果。他们管理着274个包,主要包每月下载300次。即使只节省一次OpenSSL或Python的编译,也能大幅减少CI构建时间和成本。团队对此表示高度赞赏,这直接提升了开发效率。
代码精简30万行:消除冗余依赖管理
在迁移到vcpkg和CMake之前,Askia的旧代码库使用多种依赖管理方式,包括源码包含、修改后源码、NuGet包和预编译二进制,导致难以追踪版本。引入CMake和vcpkg后,主代码库减少了约10%的代码量,即30万行,这些主要是项目文件、脚本和复制的依赖。这不仅简化了构建过程,还提高了代码的可维护性。
跨平台一致性:Windows开发,Linux生产
Askia的开发环境基于Windows,使用MSVC和GCC13编译器,而生产环境是Ubuntu 22.04 Docker容器。通过vcpkg和CMake,他们确保了跨平台的一致性和可重复性构建。所有代码兼容Windows,并能在两个平台间交换服务。Docker容器分为基础镜像、开发层、静态分析层和生产层,开发者和CI使用相同镜像,进一步保证了环境一致性。
Q&A
vcpkg是什么,它的主要功能是什么?
vcpkg是由微软和C++社区维护的免费开源C/C++包管理器,支持Windows、macOS和Linux,主要用于管理依赖和简化构建过程。
Askia公司使用vcpkg后有哪些具体的改进?
Askia通过使用vcpkg和CMake,减少了构建依赖的时间,代码量减少约30万行,并确保了一致和可重复的构建。
使用vcpkg对开发团队的入职流程有什么影响?
使用vcpkg显著改善了入职流程,帮助团队在短时间内扩展规模,简化了新开发者的上手步骤。
Askia在转向vcpkg之前是如何管理C++依赖的?
在转向vcpkg之前,Askia使用多种方法管理依赖,包括源代码、公共NuGet包和预编译二进制文件,管理过程复杂且难以追踪版本。
vcpkg如何帮助Askia公司节省构建时间和成本?
vcpkg的二进制缓存功能减少了CI构建时间和成本,团队对节省编译时间表示赞赏。
Askia公司的开发环境是怎样的?
Askia的开发环境使用Visual Studio 2022,采用MSVC和GCC13编译器,所有项目使用CMake和vcpkg构建,并在Docker容器中运行。