使用vcpkg與json文件自動安裝項目依賴庫

說明

本文記錄自己使用vcpkg.json文件自動安裝依賴庫并完成編譯的全過程。

關于vcpkg是什么這里就不多詳細解釋,可以看一下專門的介紹及安裝的文章,總之了解這是一個C++的包管理工具就可以了。

流程

下面介紹從GitHub上克隆C++項目以及為這個項目安裝所需依賴項,并完成編譯的全過程。

1 拉取項目

在GitHub上找到你想要克隆的項目,復制地址。

在這里插入圖片描述

得到地址后,在你想要復制項目的文件夾中右擊,選"open git bash here"
輸入git clone + 復制的地址
等待項目克隆完成
在這里插入圖片描述

2 編輯vcpkg.json文件

這一步的前提是電腦上已經安裝了vcpkg,并將它的路徑同步到了環境變量中,記住這個環境變量的名稱,在編寫CMakeLists文件時要用,如圖
在這里插入圖片描述
沒有安裝的話需要找教程安裝一下。
然后根據該項目在README中所描述的依賴項編寫vcpkg.json
依賴項
編寫vcpkg.json文件

{"name": "electric-inspection-backend","version-string": "0.0.1","dependencies": ["boost","cgal","lastools","spdlog","cxxopts","tbb","jsoncpp","shapelib","eigen3","glm","gmp","mpfr","ceres","libpng","libjpeg-turbo","tiff","glew","glad","glfw3"]}
  • name:項目的名稱,標識這個 vcpkg.json 文件所描述的項目。無需在意,這個的作用只是為了寫編譯過程中的日志文件。
  • version-string:項目版本號,取決于自己,可直接復制。
  • dependencies:依賴庫列表

這里安裝的庫明顯比要求的多,這是因為有些庫并沒有在README中寫明。不過你在后續使用cmake構建時,會提醒你卻庫,在這里再添加就好。

3 修改CMakeLists文件

此時需要修改項目根目錄下的CMakeLists.txt文件,使其能夠連接到vcpkg,自動識別vcpkg.json文件,并開始安裝依賴庫。

在這里插入圖片描述
注意,vcpkg相關配置代碼必須在project之前,否則無法自動識別vcpkg.json文件,可從下面復制

# vcpkg配置,必須位于project之前
if(DEFINED ENV{VCPKG_ROOT})set(VCPKG_ROOT "$ENV{VCPKG_ROOT}" CACHE PATH "") # 從環境變量中讀取vcpkg根目錄
else()set(VCPKG_ROOT "E:/vcpkg_clone" CACHE PATH "") # 手動設置vcpkg根目錄
endif()message("set VCPKG_ROOT: ${VCPKG_ROOT}")
set(VCPKG_FEATURE_FLAGS "version") # 用于支持自定義依賴版本
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake") # 設置vcpkg工具鏈

構建項目

接下來就可以開始使用cmake指令來構建項目,指令可參照該項目在GitHub上給定的指令順序
在這里插入圖片描述
摁住shift右擊,打開PowerShell窗口,輸入命令,開始安裝
在這里插入圖片描述
安裝完成
在這里插入圖片描述

這時可以看到build文件夾中多出了 vcpkg_installed 文件,這就是該項目依賴項的安裝位置。

在這里插入圖片描述
然后啟動解決方案,運行就可以了。

注意:之后可能代碼中還會出現錯誤,但是這與依賴項安裝就沒關系了。我這里就出現了一些代碼上的錯誤,查資料改一下就可以運行了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12742.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二叉樹的常見操作

建立樹 復制二叉樹 計算深度 計算總結點數 計算葉子結點數

OpenHarmony標準設備應用開發(二)——布局、動畫與音樂

本章是 OpenHarmony 標準設備應用開發的第二篇文章。我們通過知識體系新開發的幾個基于 OpenHarmony3.1 Beta 標準系統的樣例:分布式音樂播放、傳炸彈、購物車等樣例,分別介紹下音樂播放、顯示動畫、動畫轉場(頁面間轉場)三個進階…

AI工具的熱門與卓越:揭示AI技術的實際應用和影響

文章目錄 每日一句正能量前言常用AI工具創新AI應用個人體驗分享后記 每日一句正能量 我們在我們的勞動過程中學習思考,勞動的結果,我們認識了世界的奧妙,于是我們就真正來改變生活了。 前言 隨著人工智能(AI)技術的快…

深度剖析MyBatis的二級緩存

二級緩存的原理 MyBatis 二級緩存的原理是什么? 二級緩存的原理和一級緩存一樣,第一次查詢會將數據放到 緩存 中,然后第二次查詢直接去緩存讀取。但是一級緩存是基于 SqlSession 的,二級緩存是基于 mapper 的 namespace 的。也就是…

關于API接口的自述

在實際工作中,我們需要經常跟第三方平臺打交道,可能會對接第三方平臺API接口,或者提供API接口給第三方平臺調用。 那么問題來了,如果設計一個優雅的API接口,能夠滿足:安全性、可重復調用、穩定性、好定位問…

Qt運行時,如何設置第一個聚焦的控件

問題:Qt第一個聚焦的控件,如何自行設置? 嘗試: 1.在代碼中設置 lineEdit->setFocus() 。無效! 2.Qt Designer–打開form1.ui–菜單欄下一行–Edit Tab Order–按順序點擊–菜單欄下一行–Edit Widgets–退出。無效…

為什么做了功能測試還要做接口測試

接口測試與功能測試不是重復的測試,而是互為補充的測試策略。 在軟件測試領域,接口測試和功能測試被視為質量保證過程中至關重要的組成部分。盡管它們之間存在部分重復,但更多的情況下,它們相輔相成,各自發揮著獨特的作用。本文將探討接口測試與功能測試之間的關系,以及它…

【easyX】動手輕松掌握easyX 1

01 簡單繪圖 在這個程序中&#xff0c;我們先初始化繪圖窗口。其次&#xff0c;簡單繪制兩條線。 #include <graphics.h>//繪圖庫頭文件 #include <stdio.h> int main() {initgraph(640, 480);//初始化640?480繪圖屏幕line(200, 240, 440, 240);//畫線(200,240)…

MySQL是如何選擇索引的?

2.3.5. 索引選擇 MySQL是如何選擇索引的&#xff1f; 優化器決定了具體某一索引的選擇&#xff0c;也就是常說的執行計劃。而優化器的選擇是基于成本&#xff08;cost&#xff09;&#xff0c;哪個索引的成本越低&#xff0c;優先使用哪個索引。 SQL 優化器會分析所有可能的執…

Python操作鼠標鍵盤和爬蟲

一.pyautogui 庫 pyautogui 是一個 Python 庫&#xff0c;允許控制鼠標和鍵盤。可以通過它編寫 Python 腳本來自動執行各種任務&#xff0c;例如點擊按鈕、輸入文本、移動鼠標等。這個庫非常適合用來編寫自動化腳本來完成重復性的工作&#xff0c;比如網頁表單填寫、屏幕截圖、…

STC8增強型單片機開發——定時器Timer

一、定時器 定時器是一種計時裝置&#xff0c;通常由一個晶體振蕩器提供時鐘信號&#xff0c;可以計時一定的時間后執行相應的操作。在單片機中&#xff0c;定時器一般是由計數器和時鐘源組成的&#xff0c;可以用來產生一定時間間隔的中斷信號&#xff0c;或者用于測量輸入信號…

開放式運動耳機哪款好用?五款高性能值得信賴產品推薦

身為戶外運動的達人&#xff0c;我發現開放式運動耳機簡直是咱們運動時的最佳拍檔&#xff0c;不管是跑步還是健身&#xff0c;開放式運動耳機最為舒適&#xff0c;它的妙處就在于不用塞進耳朵&#xff0c;這樣既安全又衛生&#xff0c;戶外動起來更放心。但市面上好壞參半&…

AIGC行業:探索發展風口,把握市場脈搏

AIGC行業現在適合進入嗎 簡介&#xff1a; AIGC行業&#xff1a;探索發展風口&#xff0c;把握市場脈搏 隨著人工智能技術的快速發展&#xff0c;AIGC&#xff08;人工智能生成內容&#xff09;行業正逐漸成為科技界的新寵。在當前的時代背景下&#xff0c;我們不禁要問&…

Chisel中對對<: 和:的理解(其實是Scala中的理解)

在 Scala 語言和 Chisel 硬件構造語言中&#xff0c;<: 和 : 是用于類型注解的兩個不同的符號&#xff0c;它們在泛型編程和類型系統中扮演重要角色。下面是它們各自的意義和用途&#xff1a; <:&#xff08;子類型關系&#xff09; <: 符號在 Scala 中表示子類型關…

Nginx詳細介紹一

Nginx是一個高性能的HTTP和反向代理服務器&#xff0c;它也可以作為郵件服務器使用。 Nginx基本介紹 基本概念&#xff1a; Nginx可以處理大量的并發連接&#xff0c;具有很高的穩定性和低資源消耗的特點。它主要用于Web服務、反向代理、負載均衡和HTTP緩存等場景。 安裝與配…

【半夜學習MySQL】內置函數(含日期、字符串、數學等函數常用用法介紹及示例詳解)

&#x1f3e0;關于專欄&#xff1a;半夜學習MySQL專欄用于記錄MySQL數據相關內容。 &#x1f3af;每天努力一點點&#xff0c;技術變化看得見 文章目錄 日期函數字符串函數數學函數其他函數 日期函數 函數名稱描述current_date()當前日期current_time()當前時間current_time()…

php8.2使用laravel V11.0

報錯&#xff1a;You must enable the openssl extension in your php.ini to load information from https://mirrors.aliyun.com/composer 1、搜索&#xff1a;extension_dir去掉;號 2、搜索&#xff1a;extensionopenssl去掉;號

幻獸帕魯Palworld服務器手動部署

目錄 帕魯官方文檔手動安裝steamcmd通過steamcmd安裝帕魯后端客戶端連接附錄&#xff1a;PalServer.sh的啟動項附錄&#xff1a;配置文件 帕魯官方文檔 https://tech.palworldgame.com/ 手動安裝steamcmd 創建steam用戶 sudo useradd -m steam sudo passwd steam下載steamc…

你寫HTML的時候,會注重語義化嗎?

其實說到語義化&#xff0c;多年前端開發經驗的老手估計也不會太在意&#xff0c;有時候工期太緊&#xff0c;有時候自己疏忽&#xff0c;也就不那么在意了&#xff0c;直接DIVCSS一把梭下去了。 目錄 什么是HTML 什么是HTML語義化 HTML語義化所帶來的好處 我把CSS樣式引入…

_pickle.UnpicklingError: STACK_GLOBAL requires str

導致這個報錯的原因是我跑yolo的時候修改數據集了&#xff0c;里面的label.cache沒有刪除&#xff0c;咱只要刪除掉緩存就行&#xff01;&#xff01; 我這里是已經刪除掉了&#xff0c;所以圖片里面沒有&#xff0c;一般就是在箭頭所示位置有.cache文件的