基于vcpkg + CMake的跨平臺(tái)構(gòu)建流水線搭建

搭建基于vcpkg和cmake的跨平臺(tái)構(gòu)建流水線的核心在于利用vcpkg管理依賴,cmake組織構(gòu)建流程,從而實(shí)現(xiàn)代碼在不同操作系統(tǒng)和編譯器上的自動(dòng)化編譯和測(cè)試。1. 安裝配置vcpkg:克隆倉庫并運(yùn)行引導(dǎo)腳本,設(shè)置vcpkg_root環(huán)境變量,可選地將vcpkg加入path;2. 創(chuàng)建cmakelists.txt:指定最低版本、項(xiàng)目名稱、引入vcpkg工具鏈、查找并鏈接所需庫;3. 使用vcpkg安裝依賴:根據(jù)平臺(tái)架構(gòu)執(zhí)行如vcpkg install boost:x64-windows或x64-linux等命令;4. 配置構(gòu)建流水線:通過ci/cd工具安裝vcpkg與cmake,使用cmake生成構(gòu)建系統(tǒng)并進(jìn)行編譯;5. 解決跨平臺(tái)依賴問題:通過vcpkg的triplet機(jī)制選擇對(duì)應(yīng)平臺(tái)依賴;6. 優(yōu)化構(gòu)建速度:使用緩存、ninja構(gòu)建系統(tǒng)、并行編譯及增量編譯;7. 處理私有倉庫:設(shè)置vcpkg_overlay_ports指向自定義port目錄以優(yōu)先加載內(nèi)部庫。

基于vcpkg + CMake的跨平臺(tái)構(gòu)建流水線搭建

搭建基于vcpkg和CMake的跨平臺(tái)構(gòu)建流水線,核心在于利用vcpkg管理依賴,CMake組織構(gòu)建流程,從而實(shí)現(xiàn)代碼在不同操作系統(tǒng)和編譯器上的自動(dòng)化編譯和測(cè)試。

基于vcpkg + CMake的跨平臺(tái)構(gòu)建流水線搭建

首先,我們需要一個(gè)可靠的依賴管理方案和一套標(biāo)準(zhǔn)化的構(gòu)建流程。vcpkg解決了依賴管理的問題,CMake則提供了跨平臺(tái)的構(gòu)建能力。將兩者結(jié)合,能顯著簡(jiǎn)化跨平臺(tái)構(gòu)建的復(fù)雜性。

基于vcpkg + CMake的跨平臺(tái)構(gòu)建流水線搭建

為什么選擇vcpkg和CMake?

vcpkg簡(jiǎn)化了第三方庫的獲取和管理。它能夠自動(dòng)下載、構(gòu)建和安裝依賴項(xiàng),并能輕松管理不同版本的庫。CMake則是一個(gè)強(qiáng)大的構(gòu)建系統(tǒng)生成器,它可以生成各種構(gòu)建系統(tǒng)(如Makefile、Ninja、visual studio項(xiàng)目等)的配置文件,使得項(xiàng)目可以在不同的平臺(tái)上使用相同的構(gòu)建流程。

基于vcpkg + CMake的跨平臺(tái)構(gòu)建流水線搭建

搭建步驟

  1. 安裝和配置vcpkg:

    • gitHub克隆vcpkg倉庫:git clone https://github.com/microsoft/vcpkg
    • 運(yùn)行vcpkg的引導(dǎo)腳本:.vcpkgbootstrap-vcpkg.bat (windows) 或 ./vcpkg/bootstrap-vcpkg.sh (linux/macos)
    • 設(shè)置環(huán)境變量VCPKG_ROOT指向vcpkg的安裝目錄。
    • (可選) 將vcpkg添加到PATH環(huán)境變量,方便直接使用vcpkg命令。
  2. 創(chuàng)建CMakeLists.txt:

    • 在項(xiàng)目根目錄下創(chuàng)建CMakeLists.txt文件。
    • 設(shè)置CMake最低版本要求:cmake_minimum_required(VERSION 3.15)
    • 項(xiàng)目名稱:project(MyProject)
    • 引入vcpkg工具鏈文件:set(CMAKE_TOOLCHaiN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
    • 查找需要的庫:find_package(Boost REQUIRED) (例如,查找Boost庫)
    • 添加可執(zhí)行文件或庫:add_executable(MyProject main.cpp)
    • 鏈接需要的庫:target_link_libraries(MyProject Boost::boost)
  3. 使用vcpkg安裝依賴:

    • 使用vcpkg install 安裝需要的依賴。例如,vcpkg install boost:x64-windows (Windows 64位) 或 vcpkg install boost:x64-linux (Linux 64位)。
    • 指定平臺(tái)和架構(gòu)非常重要,確保安裝的庫與目標(biāo)平臺(tái)兼容。
  4. 配置構(gòu)建流水線:

    • 可以使用各種CI/CD工具(如GitHub Actions、gitlab CI、azure devops等)配置構(gòu)建流水線。
    • 在流水線中,首先安裝vcpkg和CMake。
    • 然后,使用CMake生成構(gòu)建系統(tǒng):cmake -B build -S .
    • 最后,使用生成的構(gòu)建系統(tǒng)進(jìn)行編譯:cmake –build build

如何解決跨平臺(tái)依賴問題?

不同平臺(tái)可能需要不同版本的依賴庫,或者依賴庫的名稱有所差異。vcpkg通過triplet的概念來解決這個(gè)問題。Triplet定義了目標(biāo)平臺(tái)、架構(gòu)和編譯器。例如,x64-windows, x64-linux, x64-osx都是不同的triplet。

在構(gòu)建流水線中,可以根據(jù)不同的平臺(tái)選擇不同的triplet進(jìn)行安裝。例如,在GitHub Actions中,可以使用if語句來判斷當(dāng)前運(yùn)行的平臺(tái),然后選擇合適的triplet:

steps:   - name: Install dependencies (Windows)     if: runner.os == 'Windows'     run: vcpkg install boost:x64-windows    - name: Install dependencies (Linux)     if: runner.os == 'Linux'     run: vcpkg install boost:x64-linux

如何優(yōu)化構(gòu)建速度?

構(gòu)建速度是影響開發(fā)效率的關(guān)鍵因素。以下是一些優(yōu)化構(gòu)建速度的技巧:

  • 使用緩存: CI/CD工具通常提供緩存機(jī)制,可以將vcpkg安裝的依賴緩存起來,避免每次構(gòu)建都重新下載和編譯。
  • 使用Ninja構(gòu)建系統(tǒng): Ninja是一個(gè)小而快的構(gòu)建系統(tǒng),通常比Makefile構(gòu)建速度更快。可以在CMake中指定使用Ninja:cmake -B build -S . -GNinja
  • 并行編譯: 使用線程進(jìn)行并行編譯可以顯著提高構(gòu)建速度。可以在CMake構(gòu)建命令中指定線程數(shù):cmake –build build -j
  • 增量編譯: CMake支持增量編譯,只編譯修改過的文件。確保CMake配置正確,以便充分利用增量編譯的優(yōu)勢(shì)。

如何處理vcpkg的私有倉庫?

有時(shí)候,我們需要使用私有的vcpkg倉庫,例如包含公司內(nèi)部的庫。這可以通過配置VCPKG_OVERLAY_PORTS環(huán)境變量來實(shí)現(xiàn)。

VCPKG_OVERLAY_PORTS指向包含自定義port文件的目錄。vcpkg會(huì)優(yōu)先搜索這些目錄,然后再搜索官方的vcpkg倉庫。

例如,假設(shè)我們有一個(gè)私有倉庫位于/path/to/my-vcpkg-ports,可以在構(gòu)建流水線中設(shè)置環(huán)境變量:

env:   VCPKG_OVERLAY_PORTS: /path/to/my-vcpkg-ports

然后在私有倉庫中創(chuàng)建相應(yīng)的port文件,例如ports/mylib/portfile.cmake。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享