日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

vcpkg快速入门手册

發(fā)布時間:2023/12/31 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vcpkg快速入门手册 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 簡介
    • 2. 安裝與使用
      • 2.1 獲取vcpkg
      • 2.2 編譯vcpkg
      • 2.3 vcpkg的文件夾層次結(jié)構(gòu)
      • 2.4 設(shè)置vcpkg的環(huán)境變量
      • 2.5 vcpkg的常用命令
      • 2.6 安裝包與Visual Studio集成
    • 3. 常見的C++庫的CMake配置方式
      • 3.1 Boost
      • 3.2 cereal
      • 3.3 Ceres Solver
      • 3.4 CGAL
      • 3.5 FLANN
      • 3.6 GDAL
      • 3.7 GLEW
      • 3.8 GMP
      • 3.9 GTest
      • 3.10 GSL
      • 3.11 HDF5
      • 3.12 Lastools/Laslib
      • 3.13 OpenCV
      • 3.14 OpenNI2
      • 3.15 OSG
      • 3.16 PDAL
      • 3.17 PROJ
      • 3.18 Pybind11庫
      • 3.19 Range-v3
      • 3.20 SltBench
      • 3.21 VTK
    • 4. vcpkg常見的錯誤解決
      • 4.1 未安裝VS英文語言包
      • 4.2 未關(guān)閉防病毒軟件
      • 4.3 未正確下載軟件源
      • 4.4 常見C++庫編譯錯誤的解決辦法

如果你希望了解vcpkg,希望解決包括如何使用vcpkg構(gòu)建軟件包,如何將vcpkg構(gòu)建的軟件包集成到Visual Studio,如何使用vcpkg構(gòu)建指定版本的軟件包,如何解決vcpkg的常見報錯信息,如何與CMake配合構(gòu)建工程等等問題,請你認(rèn)真閱讀本文檔以快速入門!

1. 簡介

vcpkg 是適用于 C 和 C++ 庫的跨平臺命令行包管理器。 它簡化了 Windows、Linux 和 macOS 上第三方庫的購置與安裝。 如果項(xiàng)目要使用第三方庫,建議通過 vcpkg 來安裝它們。 vcpkg 同時支持開源和專有庫。 已測試 vcpkg Windows 目錄中所有庫與 Visual Studio 2015、Visual Studio 2017 及 Visual Studio 2019 的兼容性。 在 Windows 和 Linux/macOS 目錄之間,vcpkg 現(xiàn)已支持?jǐn)?shù)千個庫。 C++ 社區(qū)會不斷向兩個目錄添加更多的庫。

微軟官方介紹鏈接

2. 安裝與使用

2.1 獲取vcpkg

vcpkg的官方源碼站點(diǎn)為:https://github.com/microsoft/vcpkg

可以使用git命令獲取官方代碼倉庫

git clone https://github.com/microsoft/vcpkg

2.2 編譯vcpkg

  • Windows平臺

    在控制臺中切換到vcpkg所在目錄,運(yùn)行vcpkg目錄下的bootstrap-vcpkg.bat命令,編譯好后會在vcpkg所在目錄下生產(chǎn)vcpkg.exe文件。

    C:\Users\Administrator>F:F:\>cd vcpkg/vcpkgF:\vcpkg\vcpkg>bootstrap-vcpkg.bat

    注意:最新版官方去掉了本地編譯的過程,會從官方倉庫中下載已經(jīng)生成好的vcpkg.exe文件

  • Linux平臺

    在終端中執(zhí)行vcpkg目錄下的sudo bash ./ bootstrap-vcpkg.sh命令,會生成一個可執(zhí)行文件vcpkg。定義環(huán)境變量VCPKG_ROOT="/vcpkg"

2.3 vcpkg的文件夾層次結(jié)構(gòu)

所有 vcpkg 功能和數(shù)據(jù)都自包含在實(shí)例的單獨(dú)目錄層次結(jié)構(gòu)中。 沒有注冊表設(shè)置或環(huán)境變量。 可以在一臺計(jì)算機(jī)上設(shè)置任意數(shù)量的 vcpkg 實(shí)例,它們彼此互不干擾。vcpkg 的文件夾層次結(jié)構(gòu)如下:

  • buildtrees - 包含從中生成每個庫的源的子文件夾。
  • docs - 文檔和示例。
  • downloads - 所有已下載的工具或源的緩存副本。 運(yùn)行安裝命令時,vcpkg 會首先搜索此處。
  • installed - 包含每個已安裝庫的標(biāo)頭和二進(jìn)制文件。 與 Visual Studio 集成時,實(shí)質(zhì)上是相當(dāng)于告知它將此文件夾添加到其搜索路徑。
  • packages - 在不同的安裝之間用于暫存的內(nèi)部文件夾。
  • ports - 用于描述每個庫的目錄、版本和下載位置的文件。 如有需要,可添加自己的端口。
  • scripts - 由 vcpkg 使用的腳本(CMake、PowerShell)。
  • toolsrc - vcpkg 和相關(guān)組件的 C++ 源代碼。
  • triplets - 包含每個受支持目標(biāo)平臺(如 x86-windows 或 x64-uwp)的設(shè)置。

2.4 設(shè)置vcpkg的環(huán)境變量

為了方便vcpkg的使用,建議在環(huán)境變量中設(shè)置如下值:

環(huán)境變量值描述
VCPKG_DEFAULT_TRIPLETx64-windowsvcpkg默認(rèn)構(gòu)建的三元組,通常在Windows 64位平臺下可以直接設(shè)置為x64-windows
VCPKG_ROOTF:\vcpkg\vcpkgvcpkg的工作目錄,對于本地存在多個版本的vcpkg,不建議設(shè)置此變量
VCPKG_DOWNLOADSF:\vcpkg\downloadsvcpkg下載軟件源和工具的緩存目錄,建議保留此文件夾中的所有文件。

2.5 vcpkg的常用命令

  • help命令

    可以查看vcpkg的常用命令

    vcpkg help
  • install命令

    安裝一個指定的軟件包,該C++軟件包必須被vcpkg支持,即在ports文件夾內(nèi)能找到該軟件包的端口描述。

    vcpkg install gdal

    需要注意的是,通常一個軟件包可以附帶多種其他三方庫的功能支持,部分功能已經(jīng)被vcpkg支持(可以通過searchsearchsearch命令查看軟件包附帶的第三方支持),通過vcpkg安裝軟件包時也可以同時制定三方庫特性的支持。例如安裝一個Windows系統(tǒng)64位版本的帶libspatialite支持的gdal庫可以使用如下命令:

    vcpkg install gdal[core,libspatialite] --triplet=x64-windows

    vcpkg在編譯軟件包時,會將從軟件包官方源中下載到的tar格式源碼解壓到buildtrees文件夾,并且編譯的中間文件也會在buildtrees文件夾。默認(rèn)情況下,buildtrees文件夾在vcpkg的根目錄下,也可以在安裝軟件包時指定buildtrees文件夾的實(shí)際位置,例如:

    vcpkg install gdal[core,libspatialite] --triplet=x64-windows --x-buildtrees-root=F:/vcpkg/buildtrees
  • remove命令

    移除一個指定的安裝包,例如刪除已經(jīng)安裝好的gdal包使用如下命令:

    vcpkg remove gdal

    如果希望移除所有outdated的安裝包,可以使用以下命令:

    vcpkg remove --outdated

    有些時候,僅僅通過remove命令刪除已經(jīng)安裝好的軟件包會出現(xiàn)異常。例如可能出現(xiàn)刪除安裝包后,重新安裝包提示“已經(jīng)安裝”。如果我們需要徹底將包從installed目錄中移除,需要執(zhí)行以下流程

    • 從packages目錄中找到包對應(yīng)的目錄(注意區(qū)分版本),將整個目錄全部刪除;

    • 從buildtrees 目錄中找到包對應(yīng)的目錄,將整個目錄全部刪除;

    • 進(jìn)入installed\vcpkg\info目錄,查找包對應(yīng)的listlistlist文件。listlistlist文件中記錄了包生成后的lib、dll、pdb、include頭文件和其他輔助文件,手動刪除這些文件,最后刪除listlistlist文件本身;

    • 進(jìn)入installed\vcpkg目錄,打開statusstatusstatus文件,搜索包,將包相關(guān)內(nèi)容手動刪除。

  • list命令

    列表所有已經(jīng)安裝的軟件包,也可以指定名以列出按照的某一具體軟件包

    vcpkg list # list all installed packagesvcpkg list gdal # list installed gdal

    通過listlistlist命令可以方便地查詢某個安裝包是否安裝以及對應(yīng)的安裝版本:

  • search命令

    搜索vcpkg支持的安裝包:

    vcpkg search gdal

    當(dāng)需要查看安裝包附帶哪些三方庫支持時,使用searchsearchsearch命令也很方便:

  • depend-info命令

    搜索安裝包的依賴,如果安裝時指定了第三方庫的支持,搜索依賴時也需要指定軟件包具有哪些三方庫特性。例如,搜索一個帶Qt、Cuda支持的OpenCV庫依賴哪些包,可以使用以下命令:

    vcpkg depend-info opencv[qt,cuda]

**如果希望知道哪些軟件包依賴包,目前vcpkg沒有命令直接支持這一功能。**可以打開statusstatusstatus文件,進(jìn)行檢索判斷。例如如果想知道哪些包依賴hdf5庫,在statusstatusstatus文件中搜索hdf5,所有depends一欄有hdf5列出的包都依賴hdf5庫,例如OpenCV:

  • x-history命令

    查詢vcpkg中軟件包的更新記錄,需要注意的是,vcpkg引入一個包的端口更新時需要兼容所有依賴它的其他端口,以保證兼容性。因此,vcpkg支持的軟件包的更新記錄和的官方更新記錄并不一定同步

    當(dāng)需要安裝一個特定版本的包(非vcpkg查詢到的最新版),可以使用x-history命令獲取的更新記錄,并借助git reset命令獲取對應(yīng)記錄的端口信息,此時可以構(gòu)建一個特定版本的包。

    以Boost庫為例,使用x-history命令查詢可知,目前vcpkg支持構(gòu)建的Boost庫最新版為1.75.0版:

    vcpkg x-history boost

    如果我們希望構(gòu)建Boost 1.74.0 版本,通過查詢可知,1.74.0版的提交記錄為:7944ed328a10833c4a6b3ab3ff94,使用git回退到指定版本(工作區(qū)也回退到對應(yīng)commit的狀態(tài)),然后重新構(gòu)建。整個過程的命令如下:

    vcpkg x-history boost # get boost_1.74.0 commit id: 7944ed328a10833c4a6git reset --hard 7944ed328a10833c4a6vcpkg install boost

    需要注意的是,git reset --hard 7944ed328a10833c4a6命令會將vcpkg支持的所有安裝包對應(yīng)的端口描述回退到commit 7944ed328a10833c4a6的狀態(tài)。而通常情況下,我們并不希望其他已經(jīng)安裝的軟件包受到回退的影響,我們可以采用不同目錄下的vcpkg解決這個問題!由于vcpkg并不會將信息記錄到當(dāng)前工作目錄以外的區(qū)域(如注冊表),我們可以將vcpkg拷貝到不同文件夾實(shí)現(xiàn)不同版本的區(qū)分。例如我采用F:/vcpkg/vcpkg作為與官方同步的vcpkg版,保持與Microsoft Vcpkg小組的同步更新,同時采用F:/vcpkg/vcpkg-bak作為本地需要構(gòu)建特殊版本安裝包的備用版。因此,我會在F:/vcpkg/vcpkg-bak目錄下運(yùn)行g(shù)it reset --hard 7944ed328a10833c4a6命令。

    當(dāng)構(gòu)建完成Boost 1.74.0 版,如果希望vcpkg的端口描述文件恢復(fù)到官方最新的維護(hù)狀態(tài),可以使用git pull命令。運(yùn)行此命令不會改變本地以及構(gòu)建好的編譯結(jié)果

  • export命令

    導(dǎo)出指定安裝包,可以指定安裝包的導(dǎo)出方式(如raw、nuget、zip、7zip等等),例如以zip壓縮包導(dǎo)出gdal安裝包可以運(yùn)行以下命令:

    vcpkg export gdal --zip

    運(yùn)行完成后,會在vcpkg目錄下以運(yùn)行時間生成一個zip壓縮包。zip包內(nèi)的目錄結(jié)構(gòu)如下:

    • installed - 包含導(dǎo)出安裝包的頭文件和二進(jìn)制文件(lib、pdb、dll等)。
    • scripts - 由 vcpkg 使用的腳本(CMake、PowerShell)

在下一節(jié)會介紹如何使用vcpkg生成的腳本文件配合CMake完成工程的構(gòu)建。
當(dāng)我們擁有多個版本的vcpkg,同時希望將不同版本vcpkg編譯的二進(jìn)制軟件包合并在一個installed目錄,我們也可以將制定的安裝包通過命令export導(dǎo)出,然后將導(dǎo)出包中installed目錄下的構(gòu)建平臺文件夾與目的installed目錄下的平臺文件夾直接合并(例如x64-windows文件夾)。installed\vcpkg\info目錄也可以直接合并,而對于installed\vcpkg目錄下的statusstatusstatus文件,需要手動進(jìn)行合并。

  • update命令

    可以查詢已經(jīng)安裝的軟件包中哪些包可以更新,將查詢信息輸出至upinfo.txt文件的命令如下:

    vcpkg update > upinfo.txt

    upinfo.txt文件中記錄的查詢結(jié)果如下:

    Using local portfile versions. To update the local portfiles, use git pull.
    The following packages differ from their port versions:
    boost:x64-windows 1.74.0 -> 1.75.0
    boost-accumulators:x64-windows 1.74.0 -> 1.75.0
    boost-algorithm:x64-windows 1.74.0 -> 1.75.0
    boost-align:x64-windows 1.74.0 -> 1.75.0
    boost-any:x64-windows 1.74.0 -> 1.75.0
    boost-array:x64-windows 1.74.0 -> 1.75.0
    boost-asio:x64-windows 1.74.0 -> 1.75.0#1
    boost-assert:x64-windows 1.74.0 -> 1.75.0
    boost-assign:x64-windows 1.74.0 -> 1.75.0
    boost-atomic:x64-windows 1.74.0 -> 1.75.0
    boost-beast:x64-windows 1.74.0 -> 1.75.0
    boost-bimap:x64-windows 1.74.0 -> 1.75.0
    boost-bind:x64-windows 1.74.0 -> 1.75.0
    boost-build:x64-windows 1.74.0 -> 1.75.0.beta1#1
    boost-callable-traits:x64-windows 1.74.0 -> 1.75.0
    boost-chrono:x64-windows 1.74.0 -> 1.75.0
    boost-circular-buffer:x64-windows 1.74.0 -> 1.75.0
    boost-compatibility:x64-windows 1.74.0 -> 1.75.0
    boost-compute:x64-windows 1.74.0 -> 1.75.0
    boost-concept-check:x64-windows 1.74.0 -> 1.75.0
    boost-config:x64-windows 1.74.0 -> 1.75.0
    boost-container:x64-windows 1.74.0 -> 1.75.0
    boost-container-hash:x64-windows 1.74.0 -> 1.75.0
    boost-context:x64-windows 1.74.0 -> 1.75.0
    boost-contract:x64-windows 1.74.0 -> 1.75.0
    boost-conversion:x64-windows 1.74.0 -> 1.75.0
    boost-convert:x64-windows 1.74.0 -> 1.75.0
    boost-core:x64-windows 1.74.0 -> 1.75.0
    boost-coroutine:x64-windows 1.74.0 -> 1.75.0
    boost-coroutine2:x64-windows 1.74.0 -> 1.75.0
    boost-crc:x64-windows 1.74.0 -> 1.75.0
    boost-date-time:x64-windows 1.74.0 -> 1.75.0
    boost-detail:x64-windows 1.74.0 -> 1.75.0
    boost-dll:x64-windows 1.74.0 -> 1.75.0
    boost-dynamic-bitset:x64-windows 1.74.0 -> 1.75.0
    boost-endian:x64-windows 1.74.0 -> 1.75.0
    boost-exception:x64-windows 1.74.0 -> 1.75.0
    boost-fiber:x64-windows 1.74.0 -> 1.75.0
    boost-filesystem:x64-windows 1.74.0 -> 1.75.0
    boost-flyweight:x64-windows 1.74.0 -> 1.75.0
    boost-foreach:x64-windows 1.74.0 -> 1.75.0
    boost-format:x64-windows 1.74.0 -> 1.75.0
    boost-function:x64-windows 1.74.0 -> 1.75.0
    boost-function-types:x64-windows 1.74.0 -> 1.75.0
    boost-functional:x64-windows 1.74.0 -> 1.75.0
    boost-fusion:x64-windows 1.74.0 -> 1.75.0
    boost-geometry:x64-windows 1.74.0 -> 1.75.0
    boost-gil:x64-windows 1.74.0 -> 1.75.0
    boost-graph:x64-windows 1.74.0 -> 1.75.0
    boost-graph-parallel:x64-windows 1.74.0 -> 1.75.0
    boost-hana:x64-windows 1.74.0 -> 1.75.0
    boost-heap:x64-windows 1.74.0 -> 1.75.0
    boost-histogram:x64-windows 1.74.0 -> 1.75.0
    boost-hof:x64-windows 1.74.0 -> 1.75.0
    boost-icl:x64-windows 1.74.0 -> 1.75.0
    boost-integer:x64-windows 1.74.0 -> 1.75.0
    boost-interprocess:x64-windows 1.74.0 -> 1.75.0
    boost-interval:x64-windows 1.74.0 -> 1.75.0
    boost-intrusive:x64-windows 1.74.0 -> 1.75.0
    boost-io:x64-windows 1.74.0 -> 1.75.0
    boost-iostreams:x64-windows 1.74.0 -> 1.75.0
    boost-iterator:x64-windows 1.74.0 -> 1.75.0
    boost-lambda:x64-windows 1.74.0 -> 1.75.0
    boost-lexical-cast:x64-windows 1.74.0 -> 1.75.0
    boost-local-function:x64-windows 1.74.0 -> 1.75.0
    boost-locale:x64-windows 1.74.0#3 -> 1.75.0
    boost-lockfree:x64-windows 1.74.0 -> 1.75.0
    boost-log:x64-windows 1.74.0 -> 1.75.0
    boost-logic:x64-windows 1.74.0 -> 1.75.0
    boost-math:x64-windows 1.74.0 -> 1.75.0
    boost-metaparse:x64-windows 1.74.0 -> 1.75.0
    boost-modular-build-helper:x64-windows 1.74.0#2 -> 1.75.0#4
    boost-move:x64-windows 1.74.0 -> 1.75.0
    boost-mp11:x64-windows 1.74.0 -> 1.75.0
    boost-mpi:x64-windows 1.74.0 -> 1.75.0
    boost-mpl:x64-windows 1.74.0 -> 1.75.0
    boost-msm:x64-windows 1.74.0 -> 1.75.0
    boost-multi-array:x64-windows 1.74.0 -> 1.75.0
    boost-multi-index:x64-windows 1.74.0 -> 1.75.0
    boost-multiprecision:x64-windows 1.74.0 -> 1.75.0
    boost-nowide:x64-windows 1.74.0 -> 1.75.0
    boost-numeric-conversion:x64-windows 1.74.0 -> 1.75.0
    boost-odeint:x64-windows 1.74.0 -> 1.75.0
    boost-optional:x64-windows 1.74.0 -> 1.75.0
    boost-outcome:x64-windows 1.74.0 -> 1.75.0
    boost-parameter:x64-windows 1.74.0 -> 1.75.0
    boost-parameter-python:x64-windows 1.74.0 -> 1.75.0
    boost-phoenix:x64-windows 1.74.0 -> 1.75.0
    boost-poly-collection:x64-windows 1.74.0 -> 1.75.0
    boost-polygon:x64-windows 1.74.0 -> 1.75.0
    boost-pool:x64-windows 1.74.0 -> 1.75.0
    boost-predef:x64-windows 1.74.0 -> 1.75.0
    boost-preprocessor:x64-windows 1.74.0 -> 1.75.0
    boost-process:x64-windows 1.74.0 -> 1.75.0
    boost-program-options:x64-windows 1.74.0 -> 1.75.0
    boost-property-map:x64-windows 1.74.0 -> 1.75.0
    boost-property-tree:x64-windows 1.74.0 -> 1.75.0
    boost-proto:x64-windows 1.74.0 -> 1.75.0
    boost-ptr-container:x64-windows 1.74.0 -> 1.75.0
    boost-python:x64-windows 1.74.0 -> 1.75.0#1
    boost-qvm:x64-windows 1.74.0 -> 1.75.0
    boost-random:x64-windows 1.74.0 -> 1.75.0
    boost-range:x64-windows 1.74.0 -> 1.75.0
    boost-ratio:x64-windows 1.74.0 -> 1.75.0
    boost-rational:x64-windows 1.74.0 -> 1.75.0
    boost-regex:x64-windows 1.74.0 -> 1.75.0
    boost-safe-numerics:x64-windows 1.74.0 -> 1.75.0
    boost-scope-exit:x64-windows 1.74.0 -> 1.75.0
    boost-serialization:x64-windows 1.74.0 -> 1.75.0
    boost-signals2:x64-windows 1.74.0 -> 1.75.0
    boost-smart-ptr:x64-windows 1.74.0 -> 1.75.0
    boost-sort:x64-windows 1.74.0 -> 1.75.0
    boost-spirit:x64-windows 1.74.0 -> 1.75.0
    boost-stacktrace:x64-windows 1.74.0 -> 1.75.0
    boost-statechart:x64-windows 1.74.0 -> 1.75.0
    boost-static-assert:x64-windows 1.74.0 -> 1.75.0
    boost-static-string:x64-windows 1.74.0 -> 1.75.0
    boost-stl-interfaces:x64-windows 1.74.0 -> 1.75.0
    boost-system:x64-windows 1.74.0 -> 1.75.0
    boost-test:x64-windows 1.74.0 -> 1.75.0
    boost-thread:x64-windows 1.74.0 -> 1.75.0
    boost-throw-exception:x64-windows 1.74.0 -> 1.75.0
    boost-timer:x64-windows 1.74.0 -> 1.75.0
    boost-tokenizer:x64-windows 1.74.0 -> 1.75.0
    boost-tti:x64-windows 1.74.0 -> 1.75.0
    boost-tuple:x64-windows 1.74.0 -> 1.75.0
    boost-type-erasure:x64-windows 1.74.0 -> 1.75.0
    boost-type-index:x64-windows 1.74.0 -> 1.75.0
    boost-type-traits:x64-windows 1.74.0 -> 1.75.0
    boost-typeof:x64-windows 1.74.0 -> 1.75.0
    boost-ublas:x64-windows 1.74.0 -> 1.75.0
    boost-uninstall:x64-windows 1.74.0 -> 1.75.0
    boost-units:x64-windows 1.74.0 -> 1.75.0
    boost-unordered:x64-windows 1.74.0 -> 1.75.0
    boost-utility:x64-windows 1.74.0 -> 1.75.0
    boost-uuid:x64-windows 1.74.0 -> 1.75.0
    boost-variant:x64-windows 1.74.0 -> 1.75.0
    boost-variant2:x64-windows 1.74.0 -> 1.75.0
    boost-vmd:x64-windows 1.74.0 -> 1.75.0
    boost-wave:x64-windows 1.74.0 -> 1.75.0
    boost-winapi:x64-windows 1.74.0 -> 1.75.0
    boost-xpressive:x64-windows 1.74.0 -> 1.75.0
    boost-yap:x64-windows 1.74.0 -> 1.75.0
    pcl:x64-windows 1.11.1#1 -> 1.11.1#2

    To update these packages and all dependencies, run
    .\vcpkg upgrade

    To only remove outdated packages, run
    .\vcpkg remove --outdated

    說明本地安裝的軟件包中Boost庫可以升級到1.75.0版,pcl庫可以升級到1.11.1#2版,其他已經(jīng)安裝的軟件包均為vcpkg支持的最新版。

  • upgrade命令
    如果希望直接重建所有可升級的安裝包,可以用以下方式運(yùn)行命令:

    vcpkg upgrade --no-dry-run
  • integrate命令
    將vcpkg構(gòu)建的安裝包與Vistual Stuido集成:當(dāng)需要設(shè)置為所有項(xiàng)目均可使用vcpkg構(gòu)建的安裝包時,可以使用vcpkg integrate install命令;當(dāng)需要解除與Visual Studio的集成時,可以使用vcpkg integrate remove命令;當(dāng)需要與某一具體工程集成時,可以使用vcpkg integrate project命令生成一個參考包配合nuget與單一工程集成。

    相關(guān)集成的方法將在下一小節(jié)具體介紹。

2.6 安裝包與Visual Studio集成

  • 全局集成
    vcpkg可以自動為VS工程適配目錄,開發(fā)者并不需要關(guān)心已安裝的庫的目錄在哪里,也不需要設(shè)置庫目錄和引用目錄就能自由地使用。使用以下命令可以完成全局集成:

    vcpkg integrate install

    我們新建一個hello-world工程測試下全局集成的效果,建立好hello-world工程后,可以在工程屬性選項(xiàng)中看到vcpkg的選項(xiàng)卡:

    可以在選項(xiàng)卡中進(jìn)行vcpkg的相關(guān)設(shè)置,簡單為hello-world工程引入OpenCV庫,只需要包含好相應(yīng)的頭文件就可以正常調(diào)用OpenCV的相關(guān)函數(shù):

    #include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp>int main() {const std::string imgFile = "F:/TestData/Imagery/image_small.tif";auto imgMat = cv::imread(imgFile, cv::IMREAD_GRAYSCALE);cv::namedWindow("image_small", cv::WINDOW_NORMAL);cv::imshow("image_small", imgMat);cv::waitKey(0);return 0; }

    可以看到工程正常編譯沒有任何報錯信息,并且編譯后的執(zhí)行程序可以正常運(yùn)行:

    進(jìn)入二進(jìn)制文件生成文件夾,可以看到vcpkg自動將hello-world.exe依賴的庫拷貝到生成目錄了!

    如果希望去掉vcpkg的全局集成可以使用以下命令:

    vcpkg integrate remove
  • 集成到單一工程
    使用以下命令生成nuget配置文件:

    vcpkg integrate project

    運(yùn)行完成后會有如下提示:

    F:\vcpkg\vcpkg>vcpkg integrate project
    Created nupkg: F:\vcpkg\vcpkg\scripts\buildsystems\vcpkg.F.vcpkg.vcpkg.1.0.0.nupkg

    With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
    Install-Package vcpkg.F.vcpkg.vcpkg -Source “F:\vcpkg\vcpkg\scripts\buildsystems”

    此時需要配合nuget包管理工具完成工程設(shè)置。在Viusal Studio中點(diǎn)擊工具→Nuget包管理器→程序包管理器設(shè)置,在打開的選項(xiàng)卡中完成如下設(shè)置:

    設(shè)置完成后點(diǎn)擊工具→Nuget包管理器→管理解決方案的NuGet程序包,在打開的選項(xiàng)卡中完成如下設(shè)置:

    安裝完成后,hello-world工程即可以正常編譯!

  • 與CMake集成使用

    除開以上方式直接與Visual Studio集成使用,vpckg還提供了腳本可以直接與CMake、Powershell等工具集成使用構(gòu)建工程。這里簡單介紹下如何與CMake集成使用。

    在CMake申明創(chuàng)建第一個project前,加上以下定義:

    set(VCPKG_ROOT "F:/vcpkg/vcpkg") SET(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake") if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "") endif() set(VCPKG_3RD_PARTY_ROOT "${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}") set(VCPKG_3RD_PARTY_INCLUDE "${VCPKG_3RD_PARTY_ROOT}/include")

    即指明CMAKE_TOOLCHAIN_FILE的路徑和軟件包的編譯三元組(需要從環(huán)境變量中讀取相應(yīng)的值),此時可以定義vcpkg編譯的三方庫應(yīng)用目錄為VCPKG_3RD_PARTY_INCLUDE。

    在為目標(biāo)工程引入三方庫前,需要使用find_package{find\_package}find_package命令和include_directories{include\_directories}include_directories命令(或target_include_directories{target\_include\_directories}target_include_directories命令):

    #找到OpenCV軟件包 find_package(OpenCV REQUIRED) #為所有子工程增加附加引用目錄 ${VCPKG_3RD_PARTY_INCLUDE} include_directories(${VCPKG_3RD_PARTY_INCLUDE})add_executable(${proj_name} ${RCS}) #為工程${proj_name}鏈接OpenCV的libs target_link_libraries(${proj_name} PRIVATE ${OpenCV_LIBS}) #為工程${proj_name}增加附加引用目錄 ${VCPKG_3RD_PARTY_INCLUDE} target_include_directories(${proj_name} PRIVATE ${VIS_INCLUDES})

    需要注意的是,CMake對不同的三方軟件包提供的查找方式、設(shè)置引用目錄方式和鏈接庫方式?jīng)]有固定模板,我們將在下一章介紹常見的第三方軟件包的CMake配置方式。

3. 常見的C++庫的CMake配置方式

CMake對不同的三方軟件包提供的查找方式、設(shè)置引用目錄方式和鏈接庫方式?jīng)]有固定模板,這里我們介紹了部分常見第三方軟件包的CMake配置方式。由于時間原因,并不是所有的配置信息都完成了測試,設(shè)置僅做參考,可能會因?yàn)閷?shí)際情況做變更與調(diào)整

3.1 Boost

Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。

官方網(wǎng)站:https://www.boost.org/

set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) #只申明需要的組件 find_package(Boost 1.74.0 REQUIRED COMPONENTS filesystem date_time iostreams program_options python39 locale) target_link_libraries(${proj_name} PRIVATE ${Boost_LIBRARIES})

3.2 cereal

cereal是一個只包含頭文件的C++ 11序列化庫。cereal接受任意數(shù)據(jù)類型,并可逆地將它們轉(zhuǎn)換為不同的表示形式,如緊湊二進(jìn)制編碼、XML或JSON。cereal被設(shè)計(jì)成快速、輕量級、易于擴(kuò)展——它沒有外部依賴,可以很容易地與其他代碼綁定或獨(dú)立使用。

官方網(wǎng)站:https://uscilab.github.io/cereal/

find_package(cereal CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE cereal)

3.3 Ceres Solver

Ceres Solver是一個開源c++庫,用于建模和解決大型、復(fù)雜的優(yōu)化問題。它可用于求解非線性有界約束最小二乘問題和一般無約束優(yōu)化問題。

官方網(wǎng)站:http://ceres-solver.org/index.html

find_package(Ceres CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE ceres Ceres::ceres)

3.4 CGAL

CGAL(The Computational Geometry Algorithms Library)以C++庫的形式提供了方便的訪問高效可靠的幾何算法。CGAL用于需要幾何計(jì)算的各個領(lǐng)域,如地理信息系統(tǒng)、計(jì)算機(jī)輔助設(shè)計(jì)、分子生物學(xué)、醫(yī)學(xué)成像、計(jì)算機(jī)圖形學(xué)和機(jī)器人技術(shù)。

CGAL庫提供了豐富的數(shù)據(jù)結(jié)構(gòu)和算法,如三角剖分,Voronoi圖,布爾操作的多邊形和多面體,點(diǎn)集處理,安排曲線,曲面和體積網(wǎng)格生成,幾何處理,阿爾法形狀,凸殼算法,形狀重建,AABB和KD樹…

官方網(wǎng)站:https://www.cgal.org/

find_package(CGAL CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE CGAL::CGAL)

3.5 FLANN

FLANN是一個用于在高維空間中執(zhí)行快速近似最近鄰搜索的庫。它包含了一組我們發(fā)現(xiàn)最適合最近鄰搜索的算法,以及一個根據(jù)數(shù)據(jù)集自動選擇最佳算法和最優(yōu)參數(shù)的系統(tǒng)。

官方網(wǎng)站:https://github.com/mariusmuja/flann

find_package(flann CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE flann::flann flann::flann_cpp)

3.6 GDAL

GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫。它利用抽象數(shù)據(jù)模型來表達(dá)所支持的各種文件格式。它還有一系列命令行工具來進(jìn)行數(shù)據(jù)轉(zhuǎn)換和處理。OGR是GDAL項(xiàng)目的一個分支,功能與GDAL類似,只不過它提供對矢量數(shù)據(jù)的支持。

官方網(wǎng)站:https://gdal.org/

find_package(GDAL REQUIRED) target_include_directories(${proj_name} PRIVATE ${GDAL_INCLUDE_DIRS}) target_link_libraries(${proj_name} PRIVATE ${GDAL_LIBRARIES})

3.7 GLEW

OpenGL Extension Wrangler Library (GLEW)是一個跨平臺的開源C/ C++擴(kuò)展加載庫。GLEW提供了高效的運(yùn)行時機(jī)制來確定目標(biāo)平臺支持哪些OpenGL擴(kuò)展。OpenGL的核心和擴(kuò)展功能在一個頭文件中公開。GLEW已經(jīng)在各種操作系統(tǒng)上進(jìn)行了測試,包括Windows、Linux、Mac OS X、FreeBSD、Irix和Solaris。

官方網(wǎng)站:http://glew.sourceforge.net/

find_package(GLEW REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE GLEW::GLEW)

3.8 GMP

GMP是一個用于任意精度算法的免費(fèi)庫,可操作有符號整數(shù)、有理數(shù)和浮點(diǎn)數(shù)。除了運(yùn)行GMP的機(jī)器中的可用內(nèi)存所暗示的精度之外,對精度沒有實(shí)際限制。GMP具有豐富的功能集,各功能具有規(guī)范的接口。GMP的主要目標(biāo)應(yīng)用是密碼學(xué)應(yīng)用與研究、互聯(lián)網(wǎng)安全應(yīng)用、代數(shù)系統(tǒng)、計(jì)算代數(shù)研究等。

官方網(wǎng)站:https://gmplib.org/

find_package(GMP REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} gmp libgmp)

3.9 GTest

GTest(googletest)是測試技術(shù)團(tuán)隊(duì)根據(jù)谷歌的具體要求和限制開發(fā)的測試框架。googletest跨平臺地支持任意類型的C++開發(fā)相關(guān)測試,不僅僅是單元測試…

官方網(wǎng)站:https://github.com/google/googletest

find_package(GTest REQUIRED) target_link_libraries(${proj_name} PRIVATE GTest::gmock GTest::gtest GTest::gmock_main GTest::gtest_main) #也有以下方式鏈接庫${GTEST_LIBRARIES} #target_link_libraries(${proj_name} PRIVATE ${GTEST_LIBRARIES})

3.10 GSL

GNU科學(xué)庫(GSL)是一個面向C和c++程序員的數(shù)字庫。它是GNU通用公共許可證下的自由軟件。該庫提供了廣泛的數(shù)學(xué)例程,如隨機(jī)數(shù)生成器,特殊函數(shù)和最小二乘擬合。總共有超過1000個函數(shù)和一個廣泛的測試套件。

官方網(wǎng)站:https://www.gnu.org/software/gsl/

find_package(GSL REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE GSL::gsl GSL::gslcblas)

3.11 HDF5

HDF(High-performance data management and storage suite)是美國國家高級計(jì)算應(yīng)用中心(National Center for Supercomputing Application,NCSA)為了滿足各種領(lǐng)域研究需求而研制的一種能高效存儲和分發(fā)科學(xué)數(shù)據(jù)的新型數(shù)據(jù)格式 。HDF5是為快速I/O處理和存儲而構(gòu)建的。

官方網(wǎng)站:https://www.hdfgroup.org/solutions/hdf5/

find_package(hdf5 CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE hdf5::hdf5-shared hdf5::hdf5_hl-shared)

3.12 Lastools/Laslib

LASlib(帶有LASzip)是一個用于讀寫激光雷達(dá)的C++編程API。

官方網(wǎng)站:https://github.com/LAStools/LAStools

#以下鏈接方式似乎有問題,無法正確鏈接 find_package(laslib CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE LASlib) #手動link lib文件 set(LASLIB_INCLUDE_DIR "${VCPKG_3RD_PARTY_INCLUDE}/LASlib") set(LASLIB_LIBRARY debug "${VCPKG_3RD_PARTY_ROOT}/debug/lib/LASlib.lib"optimized "${VCPKG_3RD_PARTY_ROOT}/lib/LASlib.lib") target_link_libraries(${proj_name} PRIVATE ${LASLIB_LIBRARY})

3.13 OpenCV

OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。 它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法。
OpenCV用C++語言編寫,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要傾向于實(shí)時視覺應(yīng)用,并在可用時利用MMX和SSE指令, 如今也提供對于C#、Ch、Ruby,GO的支持。

官方網(wǎng)站:https://opencv.org/

find_package(OpenCV REQUIRED) target_link_libraries(${proj_name} PRIVATE ${OpenCV_LIBS})

3.14 OpenNI2

OpenNI(開放自然交互)是一個多語言,跨平臺的框架,它定義了編寫應(yīng)用程序,并利用其自然交互的API。OpenNI API由一組可用來編寫通用自然交互應(yīng)用的接口組成。OpenNI的主要目的是要形成一個標(biāo)準(zhǔn)的API,來搭建視覺和音頻傳感器與視覺和音頻感知中間件通信的橋梁。

官方網(wǎng)站:https://structure.io/openni

# openni2庫的配置全部未測試 set(OPENNI2_FOUND TRUE) # auto set(OPENNI2_VERSION 1.0.0) set(OPENNI2_ROOT_DIR "C:/car_libs/OpenNI2")find_path(OPENNI2_INCLUDE_DIR NAMES OpenNI.h PATHS "${OPENNI2_ROOT_DIR}/Include") mark_as_advanced(OPENNI2_INCLUDE_DIR) # show entry in cmake-guifind_library(OPENNI2_LIBRARY NAMES OpenNI2.lib PATHS "${OPENNI2_ROOT_DIR}/Lib") mark_as_advanced(OPENNI2_LIBRARY) # show entry in cmake-guiset(OPENNI2_INCLUDE_DIRS ${OPENNI2_INCLUDE_DIR} ) set(OPENNI2_LIBRARIES ${OPENNI2_LIBRARY} )

3.15 OSG

OpenSceneGraph是一個開源的高性能3D圖形工具包,用于可視化仿真、游戲、虛擬現(xiàn)實(shí)、科學(xué)可視化和建模等領(lǐng)域的應(yīng)用程序開發(fā)人員。它完全用標(biāo)準(zhǔn)c++和OpenGL編寫,可以在所有Windows平臺上運(yùn)行,包括OSX、GNU/Linux、IRIX、Solaris、HP-Ux、AIX和FreeBSD操作系統(tǒng)。OpenSceneGraph現(xiàn)已成為世界領(lǐng)先的場景圖技術(shù),廣泛應(yīng)用于可視化模擬、空間、科學(xué)、石油天然氣、游戲和虛擬現(xiàn)實(shí)行業(yè)。

官方網(wǎng)站:http://www.openscenegraph.org/

find_package(OpenSceneGraph 3.6.5 REQUIRED osgDB osgUtil) include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) target_link_libraries(${proj_name} ${OPENSCENEGRAPH_LIBRARIES}

3.16 PDAL

PDAL是一個用于轉(zhuǎn)換和操作點(diǎn)云數(shù)據(jù)的C++ BSD庫。它非常像處理光柵和矢量數(shù)據(jù)的GDAL庫。除了庫代碼之外,PDAL還提供了一套命令行應(yīng)用程序,用戶可以方便地使用它們來處理、過濾、翻譯和查詢點(diǎn)云數(shù)據(jù)。

官方網(wǎng)站:https://pdal.io/

find_package(PDAL REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE pdalcpp pdal_util pdal_arbiter pdal_kazhdan)

3.17 PROJ

PROJ是一個通用的坐標(biāo)轉(zhuǎn)換軟件,它將地理空間坐標(biāo)從一個坐標(biāo)參考系統(tǒng)(CRS)轉(zhuǎn)換到另一個。這包括地圖投影和大地變換。PROJ包括命令行應(yīng)用程序,可以方便地從文本文件或直接從用戶輸入轉(zhuǎn)換坐標(biāo)。除了命令行實(shí)用程序之外,PROJ還公開了一個應(yīng)用程序編程接口,簡稱API。該API允許開發(fā)人員在自己的軟件中使用PROJ的功能,而不必自己實(shí)現(xiàn)類似的功能。

官方網(wǎng)站:https://proj.org/

find_package(proj4 CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE PROJ::proj PROJ4::proj)

3.18 Pybind11庫

Pybind11是一個輕量級的頭文件庫,它在Python中公開c++類型,反之亦然,主要用于創(chuàng)建現(xiàn)有c++代碼的Python綁定。它的目標(biāo)和語法與優(yōu)秀的Boost相似,主要是用來在已有的 C++代碼的基礎(chǔ)上做擴(kuò)展,它的語法和目標(biāo)非常像Boost.Python,但Boost.Python為了兼容現(xiàn)有的基本所有的C++編譯器而變得非常復(fù)雜和龐大,而因此付出的代價是很多晦澀的模板技巧以及很多不必要的對舊版編譯器的支持。Pybind11摒棄了這些支持,它只支持python2.7以上以及C++ 11以上的編譯器,使得它比Boost.Python更加簡潔高效。

官方網(wǎng)站:https://github.com/pybind/pybind11

find_package(pybind11 CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE mylib pybind11::lto pybind11::embed pybind11::module)

3.19 Range-v3

C++14/17/20的Range庫,是C++20的Range庫的基礎(chǔ)。

官方網(wǎng)站:https://ericniebler.github.io/range-v3/

find_package(range-v3 CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE range-v3 range-v3-meta range-v3::meta range-v3-concepts)

3.20 SltBench

C++ benchmark工具

官方網(wǎng)站:https://github.com/ivafanas/sltbench

find_package(sltbench CONFIG REQUIRED) #以下鏈接方式未作測試 target_link_libraries(${proj_name} PRIVATE sltbench)

3.21 VTK

可視化工具包(VTK)是用于操作和顯示科學(xué)數(shù)據(jù)的開源軟件。它提供了最先進(jìn)的3D渲染工具,一套用于3D交互的小部件,以及廣泛的2D繪圖功能。

官方網(wǎng)站:https://vtk.org/

# vcpkg給的例子,鏈接方式未作測試,不一定對 find_package(3.13 CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE ZLIB::ZLIB)find_package(3.16 CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE PostgreSQL::PostgreSQL)find_package(99 CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE X11::SM X11::Xi X11::Xt X11::Xv)find_package(vtk CONFIG REQUIRED) target_link_libraries(${proj_name} PRIVATE LZ4::LZ4 OGG::OGG VTK::lz4 VTK::mpi)

4. vcpkg常見的錯誤解決

vcpkg編譯第三方軟件包時可能出現(xiàn)各種錯誤導(dǎo)致編譯失敗,這里列舉了一些使用vcpkg安裝軟件包時可能發(fā)生的錯誤及解決辦法。

4.1 未安裝VS英文語言包

在Windows中文版操作系統(tǒng)下,Visual Studio可能默認(rèn)安裝為中文版,并不帶英文語言包。如果Viusal Studio沒有應(yīng)用英文語言包,很多三方庫很容易編譯失敗,因此首先需要給Visual Studio安裝英文語言包。

運(yùn)行Visual Studio Installer,在對應(yīng)版本的Viusal Studio選項(xiàng)卡右方點(diǎn)擊修改按鈕,在彈出的新對話框中點(diǎn)擊語言包選項(xiàng)卡,勾選英語語言包并安裝。

4.2 未關(guān)閉防病毒軟件

vcpkg在編譯某些軟件包時會調(diào)用Microsoft Windows軟件開發(fā)工具包中的Mt.exe生成簽名文件和目錄,這一行為通常會被一些防病毒軟件誤報為危險操作而被防病毒軟件禁用,最終導(dǎo)致一些軟件包的安裝失敗!因此,為了保證獲取正確的安裝結(jié)果,在運(yùn)行vcpkg的全程內(nèi)請暫時禁用所有的防病毒軟件!

4.3 未正確下載軟件源

vcpkg支持的軟件包提供的官方源通常托管在github上或者是官方鏡像服務(wù)器上,這些服務(wù)器國內(nèi)訪問速度很慢,而且通過vcpkg下載源碼網(wǎng)絡(luò)很不穩(wěn)定。因?yàn)関cpkg并不支持?jǐn)帱c(diǎn)續(xù)傳,同時在安裝軟件包過程中下載的任何源文件,vcpkg都會默認(rèn)進(jìn)行文件哈希碼檢驗(yàn),在網(wǎng)絡(luò)不穩(wěn)定的情況下,很容易發(fā)生下載異常,到賬編譯失敗!

目前在沒有更好的解決辦法下,可以將控制臺界面中展現(xiàn)的vcpkg正在下載的文件超鏈接地址復(fù)制到其他下載器手動下載,需要注意的是,vcpkg通常會將超鏈接中的文件重新命名(文件名通常不會保持一致)。因此,在我們手動下載完軟件源后,還需要重命名文件。重命名后的文件名也可以在控制臺界面查看到,同時也可以在vcpkg下載某一軟件源時,在vcpkg的downloads\temp文件夾內(nèi)找到重命名后的臨時文件,可以參考這個臨時文件將手動下載好的軟件源重命名,然后復(fù)制到vcpkg的downloads文件夾。

4.4 常見C++庫編譯錯誤的解決辦法

  • Boost
    Boost庫通常會被很多優(yōu)秀的開源C++庫依賴,因此建議使用vcpkg最先編譯Boost庫。截止到2021年2月8日,vcpkg最新支持的Boost庫為1.75.0版。1.75.0版Boost庫與CMake集成使用時,目前CMake會彈出警告;同時,目前測試最新版(1.11.1版)的pcl庫使用Boost 1.75.0版編譯會編譯失敗。因此,建議目前僅安裝Boost 1.74.0版

  • Qt5
    很多C++庫在安裝時也可以指定Qt的支持,因此建議也優(yōu)先使用vcpkg安裝Qt庫。截止到2021年2月8日,vcpkg最新支持的Qt庫為5.15.2版,經(jīng)測試,如果在安裝Qt5前,已經(jīng)安裝了protobuf庫,qt-webengine會編譯失敗。因此,如果qt-webengine無法正常編譯,可以先嘗試刪除protobuf。目前,qt-wayland會編譯失敗,考慮到我們的項(xiàng)目不需要這一特性,在編譯Qt5時去掉了wayland的支持。

  • GMP
    需要先安裝 yasm-tool:x86-windows

  • PCL
    暫不支持Boost 1.75.0版,用Boost 1.74.0版可以編譯通過

  • VTK

    • VTK8.x版本依賴PROJ6.X版本;

    • VTK指定libmysql支持時,若已經(jīng)安裝libmariadb,則會因?yàn)閘ibmysql和libmariadb庫不兼容導(dǎo)致安裝失敗,可去掉二者其一;

    • VTK庫必須指定mpi支持;

    • OpenCV4.5.1版指定VTK支持時,暫不支持VTK 9.0版。

  • OpenCV

    • 需要關(guān)閉防病毒軟件;

    • OpenCV4.5.1版指定VTK支持時,暫不支持VTK 9.0版;

    • 編譯xfeature2d時,可能因?yàn)閹讉€描述文件下載失敗而導(dǎo)致整體編譯失敗,可以參考前文手動下載描述文件,或者通過以下方式下載:

      #!/bin/bash cd ./cache/xfeatures2d/ cd boostdesc curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_lbgm.i > 0ae0675534aa318d9668f2a179c2a052-boostdesc_lbgm.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_256.i > e6dcfa9f647779eb1ce446a8d759b6ea-boostdesc_binboost_256.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_128.i > 98ea99d399965c03d555cef3ea502a0b-boostdesc_binboost_128.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i > 202e1b3e9fec871b04da31f7f016679f-boostdesc_binboost_064.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_hd.i > 324426a24fa56ad9c5b8e3e0b3e5303e-boostdesc_bgm_hd.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm_bi.i > 232c966b13651bd0e46a1497b0852191-boostdesc_bgm_bi.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_bgm.i > 0ea90e7a8f3f7876d450e4149c97c74f-boostdesc_bgm.i cd ../vgg curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_120.i > 151805e03568c9f490a5e3a872777b75-vgg_generated_120.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_64.i > 7126a5d9a8884ebca5aea5d63d677225-vgg_generated_64.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_48.i > e8d0dcd54d1bcfdc29203d011a797179-vgg_generated_48.i curl https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i > 7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i

總結(jié)

以上是生活随笔為你收集整理的vcpkg快速入门手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。