国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Visual Studio 2017安裝和項(xiàng)目配置

這篇具有很好參考價(jià)值的文章主要介紹了Visual Studio 2017安裝和項(xiàng)目配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

最近因?yàn)轫?xiàng)目需求,需要在 Windows 下開(kāi)發(fā)一個(gè) C++ 項(xiàng)目,博主之前都是在 Linux 上開(kāi)發(fā)的,突然轉(zhuǎn)到 Windows 多少還是有點(diǎn)不適應(yīng)的。本次使用的 IDE 是 Visual Studio,之前有簡(jiǎn)單使用過(guò),但是很多都忘記了,故此做個(gè)記錄,方便下次查看。

本文主要針對(duì) Visual Studio 2017 的安裝和項(xiàng)目配置進(jìn)行簡(jiǎn)單的分享,若有問(wèn)題歡迎各位看官批評(píng)指正?。。??

1. What、Why and How

1.1 What

Visual Studio 是什么?

Visual Studio(簡(jiǎn)稱 VS)是美國(guó)微軟公司的開(kāi)發(fā)工具包系列產(chǎn)品,是一個(gè)集成的開(kāi)發(fā)環(huán)境,相對(duì)來(lái)說(shuō)比較完整,它包括了整個(gè)軟件生命周期中所需要的大部分工具,如代碼完成工具、編譯器、圖形設(shè)計(jì)器、UML工具、代碼管控工具、集成開(kāi)發(fā)環(huán)境(IDE)等等,以簡(jiǎn)化開(kāi)發(fā)人員構(gòu)建應(yīng)用程序的過(guò)程。通俗的講,是一款編譯器。

要注意的是,它雖然和 Visual Studio Code 名字非常相近,但兩者完全不是同一個(gè)東西?。。?/p>

Visual Studio Code (簡(jiǎn)稱 VSCode)是美國(guó)微軟公司開(kāi)發(fā)的一個(gè)項(xiàng)目,是一款現(xiàn)代化開(kāi)源的、免費(fèi)的、跨平臺(tái)的、高性能的、輕量級(jí)的代碼編輯器。通俗地講,它是一款超級(jí)的文本編輯器。

參考自:Visual Studio和Visual Studio Code(VSCode)的區(qū)別及如何選擇

1.2 Why

為什么要學(xué)習(xí)安裝和配置 Visual Studio?

為了項(xiàng)目需求,需要在 Windows 下面開(kāi)發(fā) C++ 項(xiàng)目

1.3 How

怎么去安裝和配置 Visual Studio?

博主主要參考:VisualStudio2017下載與安裝教程詳解

2. 安裝

軟件:Visual Studio 2017 Community

官網(wǎng)下載地址:https://visualstudio.microsoft.com/zh-hansda/vs/older-downloads/
網(wǎng)盤(pán)下載:Baidu Driver【pwd:1234】

:博主安裝的 Visual Studio 2017 版本屬于老版本了,大家務(wù)必根據(jù)自己的實(shí)際情況選擇,另外每個(gè)版本提供三種選擇:Community(社區(qū)版,對(duì)學(xué)生、開(kāi)源貢獻(xiàn)者和個(gè)人免費(fèi))、Professional(專(zhuān)業(yè)版,適合小型團(tuán)隊(duì))、Enterprise(企業(yè)版,適用于任何規(guī)模的團(tuán)隊(duì))

1. 鼠標(biāo)點(diǎn)擊【Visual Studio2017(64bit)】壓縮包解壓

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-1 解壓

2. 雙擊打開(kāi)解壓后的文件夾,鼠標(biāo)點(diǎn)擊【vs2017】選擇【以管理員身份運(yùn)行】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-2 運(yùn)行

3. 點(diǎn)擊繼續(xù)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-3 繼續(xù)

4. 軟件下載及安裝中(請(qǐng)保持電腦連接網(wǎng)絡(luò)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-4 安裝準(zhǔn)備

5. 勾選【使用 C++ 的桌面開(kāi)發(fā)】(根據(jù)自己的需求勾選,博主自身只需要做 C++ 開(kāi)發(fā),右邊是該選項(xiàng)的插件根據(jù)自己的需求選擇安裝,博主未做修改)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-5 工作負(fù)荷

6. 點(diǎn)擊【單個(gè)組件】欄,如果有不想安裝的插件或者想安裝的插件,分別是取消勾選和勾選即可(博主未做修改)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-6 單個(gè)組件

7. 點(diǎn)擊【語(yǔ)言包】欄,一般選擇默認(rèn)即可,默認(rèn)一般為【中文】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-7 語(yǔ)言包

8. 點(diǎn)擊【安裝位置】(點(diǎn)擊"…"可更改軟件安裝位置,建議不要安裝在C盤(pán),可以在D盤(pán)或其它磁盤(pán)下新建一個(gè) “vs2017” 文件夾。:安裝路徑中不能有中文),取消勾選【安裝完成后保留下載緩存】,在右下角點(diǎn)擊【安裝】。

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-8 安裝位置選擇

9. 下載安裝中

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-9 下載安裝

10. 安裝完成,點(diǎn)擊右上角【X】退出

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-10 安裝完成

11. 點(diǎn)擊【以后再說(shuō)】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-11 歡迎使用

12. 選擇自己喜歡的顏色主題,點(diǎn)擊【啟動(dòng) Visual Studio】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-12 啟動(dòng)

13. 創(chuàng)建桌面啟動(dòng)快捷方式方法:點(diǎn)擊桌面左下角【開(kāi)始】圖標(biāo),點(diǎn)擊【所有應(yīng)用】 → \rightarrow 找到并拖動(dòng)【Visual Studio 2017】圖標(biāo)到電腦桌面

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖2-13 創(chuàng)建快捷方式

至此,Visual Studio 2017 安裝成功,接下來(lái)我們來(lái)看下如何使用 Visual Studio 進(jìn)行項(xiàng)目開(kāi)發(fā)。

3. 創(chuàng)建新項(xiàng)目

目的:利用 Visual Studio 2017 創(chuàng)建一個(gè)新項(xiàng)目,輸出 “Hello World”

1. 點(diǎn)擊桌面上的 Visual Studio 2017 快捷方式,然后點(diǎn)擊【新建項(xiàng)目】下面的【創(chuàng)建新項(xiàng)目】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-1 創(chuàng)建新項(xiàng)目

2. 點(diǎn)擊【空項(xiàng)目】,項(xiàng)目名稱和項(xiàng)目存放位置可自行修改,點(diǎn)擊確定

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-2 修改項(xiàng)目名稱和位置

OK!創(chuàng)建完了新項(xiàng)目我們先不著急寫(xiě)程序,先分析一下整個(gè)界面,

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-3 界面分析

首先最上面就是我們的菜單欄,然后右邊是我們的解決方案資源管理器,它是 Visual Studio 集成開(kāi)發(fā)環(huán)境(IDE)中的一個(gè)面板,它用于顯示和管理項(xiàng)目和解決方案中的文件、文件夾、引用等各種資源,我們就在這里添加我們的 C++ 文件,右下角就是關(guān)于項(xiàng)目的一些屬性,比如項(xiàng)目文件的路徑、根命名空間等

現(xiàn)在說(shuō)明下 Visual Studio 解決方案中的各個(gè)部分含義:(from chatGPT)

  • 引用(References):在這個(gè)部分,你可以添加對(duì)其他項(xiàng)目或外部庫(kù)的引用。這些引用可以是項(xiàng)目?jī)?nèi)的其他項(xiàng)目,也可以是外部的庫(kù),它們可以是編譯時(shí)鏈接的依賴項(xiàng)。

  • 外部依賴項(xiàng)(External Dependencies):這個(gè)部分列出了項(xiàng)目所依賴的外部庫(kù)或其他項(xiàng)目。你可以在這里設(shè)置如何查找和鏈接這些依賴項(xiàng),以確保項(xiàng)目能夠正確地編譯和運(yùn)行。

  • 頭文件(Header Files):這里包含了項(xiàng)目中的頭文件(.h 或 .hpp 文件),這些頭文件通常包含了類(lèi)、函數(shù)和變量的聲明。頭文件的內(nèi)容可以被多個(gè)源文件共享,因此它們通常包含接口定義。

  • 源文件(Source Files):這個(gè)部分包含項(xiàng)目中的源代碼文件(.cpp 文件)。這些文件包含了實(shí)際的類(lèi)實(shí)現(xiàn)、函數(shù)定義等。

  • 資源文件(Resource Files):這里包含項(xiàng)目所需的資源文件,如圖標(biāo)、位圖、字符串等。這些資源文件可以用于項(xiàng)目的用戶界面和其他功能。

然后整個(gè)界面中還有兩個(gè)地方值得我們重點(diǎn)關(guān)注,一個(gè)是編譯模式選擇,另外一個(gè)是編譯平臺(tái)選擇,下面我們就具體說(shuō)下該如何選擇

Copy自:Visual Studio中Debug與Release以及x86、x64、Any CPU的區(qū)別

關(guān)于編譯模式,在 Visual Studio 中編譯模式有 2 種:Debug 與 Release。這也是默認(rèn)的兩種方式,在新建一個(gè)項(xiàng)目的時(shí)候,就已經(jīng)存在這兩種模式供選擇。

Debug 通常稱為調(diào)試版本,它包含調(diào)試信息,并且不作任何優(yōu)化,便于程序員調(diào)試程序

Release 通常稱為發(fā)布版本,它往往是進(jìn)行了各種優(yōu)化,使得程序在代碼大小和運(yùn)行速度上都是最優(yōu)的,以便用戶很好地使用。

這點(diǎn)類(lèi)似于 GCC 編譯器中的 -g、-O 選項(xiàng),在開(kāi)發(fā)階段我們會(huì)啟動(dòng) -g -O0 選項(xiàng)以方便調(diào)試,而在發(fā)布生產(chǎn)環(huán)境時(shí)會(huì)啟動(dòng) -O3 選項(xiàng)進(jìn)行優(yōu)化

一般都是用 Release 來(lái)打包發(fā)布程序,因?yàn)?Release 做了更多的優(yōu)化,運(yùn)行速度更快,適合在項(xiàng)目完成后部署,另外,Release 打包出來(lái)的程序文件也相對(duì)來(lái)說(shuō)會(huì)小一些。而 Debug 模式更適合在開(kāi)發(fā)調(diào)試的時(shí)候使用。即:開(kāi)發(fā)調(diào)試的時(shí)候使用 Debug 模式,打包發(fā)布程序用 Release 模式。

關(guān)于編譯平臺(tái),它們之間最直接的區(qū)別就是:x86 平臺(tái)編譯出來(lái)的 .exe(可執(zhí)行文件)或者 .dll(動(dòng)態(tài)鏈接庫(kù))都是 32 位的,x64 平臺(tái)編譯的則是 64 位的

如果你的項(xiàng)目主程序(編譯出來(lái)是 .exe 文件的)是 x86 平臺(tái)下編譯的,而它所依賴的一個(gè)項(xiàng)目(或動(dòng)態(tài)鏈接庫(kù))是 x64 位平臺(tái)編譯出來(lái)的,則會(huì)提示 “未能加載文件或程序集…或它的某一個(gè)依賴性,試圖加載格式不正確的程序” 之類(lèi)的錯(cuò)誤。這是因?yàn)?32 位程序不能加載 64 位的 dll,更不能調(diào)用其中的類(lèi)、方法和對(duì)象等。

反之,若主程序是由 x64 平臺(tái)編譯出來(lái)的,而 dll 是 x86 的也是不行的!

因此,基本可以確定一點(diǎn):dll 和主程序的生成平臺(tái)只要一致就可以

那怎么查看自己的電腦是 x86 系統(tǒng)還是 x64 系統(tǒng)呢?

我們可以右鍵點(diǎn)擊【我的電腦】的屬性,在【系統(tǒng)類(lèi)型】中可以看到,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-4 系統(tǒng)類(lèi)型查看

可以看到博主的電腦是 64 位操作系統(tǒng),基于 x64 的處理器

接下來(lái)我們?cè)賮?lái)看下創(chuàng)建了一個(gè)新項(xiàng)目后文件夾多出了哪些文件

F:\project\test
    ├─test
    │  ├─test.vcxproj
    │  ├─test.vcxproj.filters
    │  └─test.vcxproj.user 
    └─test.sln

Visual Studio 在創(chuàng)建項(xiàng)目時(shí)會(huì)自動(dòng)生成一個(gè)默認(rèn)的文件夾結(jié)構(gòu),其中包括解決方案文件、項(xiàng)目文件、過(guò)濾器文件和用戶項(xiàng)目文件。生成多層文件夾結(jié)構(gòu)的原因是為了更好地組織和管理項(xiàng)目的相關(guān)文件,避免混亂。

可以看到 test 項(xiàng)目文件夾下又包含了一個(gè) test 文件夾和一個(gè) test.sln,而下屬的 test 文件夾下又包含了三個(gè)文件,在 Visual Studio 項(xiàng)目中,.sln 文件是解決方案文件.vcxproj 文件是項(xiàng)目文件,而 .vcxproj.filters 文件是用于組織項(xiàng)目結(jié)構(gòu)的過(guò)濾器文件,.vcxproj.user 文件包含了特定用戶的項(xiàng)目設(shè)置。讓我們來(lái)看一下這些文件的作用:(from chatGPT)

  • .sln 文件(解決方案文件): 解決方案文件包含一個(gè)或多個(gè)項(xiàng)目,可以將多個(gè)項(xiàng)目組織在一個(gè)解決方案中。解決方案文件本身不存放項(xiàng)目文件,而是引用項(xiàng)目文件的路徑和信息。一個(gè)解決方案可能包含多個(gè)項(xiàng)目,這些項(xiàng)目可以是不同類(lèi)型的應(yīng)用程序、庫(kù)、測(cè)試等。

  • .vcxproj 文件(項(xiàng)目文件): 項(xiàng)目文件是特定類(lèi)型的項(xiàng)目的配置文件,例如 C++ 項(xiàng)目就使用 .vcxproj 文件。它包含了項(xiàng)目的編譯、鏈接和部署等設(shè)置。通常,一個(gè)解決方案中會(huì)包含一個(gè)或多個(gè) .vcxproj 文件,每個(gè)文件對(duì)應(yīng)一個(gè)項(xiàng)目。

  • .vcxproj.filters 文件(過(guò)濾器文件): 過(guò)濾器文件用于組織項(xiàng)目中的文件,將源代碼、頭文件、資源等文件按照文件夾結(jié)構(gòu)進(jìn)行分類(lèi),以便在 Visual Studio 中更好地組織和瀏覽項(xiàng)目文件。

  • .vcxproj.user 文件(用戶項(xiàng)目文件): 用戶項(xiàng)目文件包含了特定用戶對(duì)項(xiàng)目的一些自定義設(shè)置,例如編譯器選項(xiàng)、調(diào)試選項(xiàng)等。這些設(shè)置是個(gè)人化的,不會(huì)與其他人共享。

在 Visual Studio 中,解決方案文件所在的文件夾通常作為頂層文件夾,其中包含項(xiàng)目文件和其他輔助文件。你看到的多層文件夾結(jié)構(gòu)只是為了更好地組織和管理項(xiàng)目文件,不同的文件承擔(dān)不同的角色。

在一個(gè)解決方案(.sln 文件)中,可以包含多個(gè)項(xiàng)目(.vcxproj 文件),每個(gè)項(xiàng)目都可以有自己的 main.cpp 或其他入口文件。解決方案文件的作用是將多個(gè)項(xiàng)目組織在一起,而每個(gè)項(xiàng)目可以是不同類(lèi)型的應(yīng)用程序、庫(kù)等。因此,一個(gè)解決方案可以包含多個(gè)項(xiàng)目,每個(gè)項(xiàng)目都可以有自己的獨(dú)立的入口文件。

OK!簡(jiǎn)單分析完了以后,我們來(lái)編寫(xiě)一個(gè) main.cpp 程序文件用于輸出 “Hello World”,在正式編寫(xiě)代碼之前我們選擇 Debug 編譯模式,x64 編譯平臺(tái),我們往下繼續(xù)

3. 右鍵點(diǎn)擊解決方案 test 的源文件 → \rightarrow 添加 → \rightarrow 新建項(xiàng)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-5 源文件添加

4. 創(chuàng)建 main.cpp 源文件,點(diǎn)擊【C++文件(.cpp)】,修改名稱,點(diǎn)擊添加

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-6 main.cpp添加

5. 編寫(xiě)代碼

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-7 編寫(xiě)代碼

6. 執(zhí)行,點(diǎn)擊菜單欄中的【調(diào)試】然后點(diǎn)擊【開(kāi)始執(zhí)行(不調(diào)試)】,或者按 Ctrl+F5 快捷鍵

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-8 執(zhí)行

7. 運(yùn)行效果如下

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖3-5 運(yùn)行效果

可以看到成功生成了 test.exe 可執(zhí)行文件,并且終端成功打印了 “Hello World”

OK!那以上就是一個(gè)最簡(jiǎn)單最基本的項(xiàng)目的創(chuàng)建,接下來(lái)我們來(lái)看點(diǎn)稍微高級(jí)點(diǎn)的東西

4. 配置OpenCV庫(kù)

我們?cè)陂_(kāi)發(fā)項(xiàng)目時(shí)經(jīng)常需要使用到一些第三方庫(kù),比如 CUDA、cuDNN、TensorRT、OpenCV 等等,那接下來(lái)我們學(xué)習(xí)下如何在我們自己創(chuàng)建的項(xiàng)目中引用第三方庫(kù),我們以 OpenCV 為例,其它第三方庫(kù)類(lèi)似

參考自:VS2017配置 opencv 教程(超詳細(xì)!?。。?、一文搞定 Visual Studio 配置 OpenCV 環(huán)境

4.1 下載opencv安裝包

下載地址:https://opencv.org/releases/

網(wǎng)盤(pán)下載:Baidu Driver【pwd:1234】

博主以 OpenCV-4.5.0 為例,點(diǎn)擊 Windows 后即可完成下載,

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-1 opencv-windows下載

由于是外網(wǎng)訪問(wèn)下載速度可能比較慢,記得開(kāi)代理,這邊提供博主下載好的幾個(gè)不同版本的安裝包,Baidu Driver【pwd:1234】

我們把下載好的安裝包移動(dòng)到指定文件夾下,建議大家建立一個(gè)公共的文件夾,專(zhuān)門(mén)用來(lái)存放第三方庫(kù)文件,方便后續(xù)不同項(xiàng)目開(kāi)發(fā)的指定,博主將 OpenCV 安裝包移動(dòng)到了 F:\project\lean 文件夾下,在 lean 文件夾下后續(xù)可以存放各種各樣的第三方庫(kù),包括 CUDA、cuDNN、TensorRT 等

下載好的文件是一個(gè) .exe 可執(zhí)行文件,我們直接雙擊點(diǎn)擊 Extract 提取文件即可

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-2 解壓

耐心等待一段時(shí)間后,在 lean 文件夾下面會(huì)多出一個(gè) opencv 文件夾,這個(gè)就是我們安裝好的 opencv

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++
vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-3 提取opencv文件

那你可能會(huì)好奇,這樣就安裝完 opencv 了嗎?這不就相當(dāng)于下載了一個(gè)壓縮包然后解壓?jiǎn)幔?/p>

那其實(shí)沒(méi)錯(cuò),這樣就把 opencv 安裝完成了,后續(xù)的都是一些環(huán)境配置的問(wèn)題,與 Linux 下面編譯 opencv 不同的是在 Windows 下,OpenCV 提供了預(yù)編譯的二進(jìn)制發(fā)行版(直接提供編譯好的動(dòng)態(tài)庫(kù)),你只需要下載壓縮包并解壓,然后進(jìn)行相應(yīng)的環(huán)境配置即可使用。

而在 Linux 下,操作系統(tǒng)的軟件包管理方式通常是基于源代碼的編譯和安裝。這意味著大多數(shù)軟件包(例如 OpenCV)在 Linux 下需要從源代碼編譯生成可執(zhí)行文件和庫(kù)(手動(dòng)編譯)。這種方式允許用戶根據(jù)自己的需要進(jìn)行定制和優(yōu)化,并且能夠適應(yīng)不同的 Linux 發(fā)行版和體系結(jié)構(gòu)。

4.2 配置系統(tǒng)環(huán)境變量

在 Windows 下使用 OpenCV 時(shí),我們還需要將 OpenCV 的 bin 目錄添加到系統(tǒng)環(huán)境變量中。這樣做的目的是為了讓操作系統(tǒng)能夠找到 OpenCV 的動(dòng)態(tài)鏈接庫(kù)(DLL)文件。這樣,當(dāng)你在你的項(xiàng)目中使用 OpenCV 時(shí),系統(tǒng)就可以在環(huán)境變量中查找到所需的 DLL 文件并加載它們。而不至于說(shuō)找不到對(duì)應(yīng)的 DLL 庫(kù)文件而報(bào)錯(cuò)

首先我們要確保下我們需要添加的 bin 文件的路徑,bin 文件存放在我們剛才下載好的 opencv/build/x64 文件夾下,點(diǎn)開(kāi)這個(gè)文件夾你會(huì)發(fā)現(xiàn)存在 vc14 和 vc15 兩個(gè)不同的 bin 文件路徑,我們?cè)撨x擇哪個(gè)呢?

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-4 bin文件路徑

這其實(shí)涉及到 Visual Studio 的版本。這兩個(gè)版本分別對(duì)應(yīng)著不同的 Visual Studio 編譯器版本,具體來(lái)說(shuō):

vc14:這是指使用 Visual Studio 2015 編譯器編譯的版本。

vc15:這是指使用 Visual Studio 2017 或更新版本的編譯器編譯的版本。

選擇哪個(gè)版本取決于你使用的 Visual Studio 版本。如果你在使用 Visual Studio 2015,那么應(yīng)該選擇 vc14 版本的庫(kù)。如果你在使用 Visual Studio 2017 或更新版本,那么應(yīng)該選擇 vc15 版本的庫(kù)。

那博主的 Visual Studio 是 2017 版本的,因此選擇 vc15 版本,那最終博主要添加的 bin 文件的完整路徑就是 F:\project\lean\opencv\build\x64\vc15\bin

接下來(lái)我們就是要把上述的路徑添加到系統(tǒng)環(huán)境變量中

【找到此電腦】 → \rightarrow 【右鍵屬性】 → \rightarrow 【高級(jí)系統(tǒng)設(shè)置】 → \rightarrow 【環(huán)境變量】 → \rightarrow 【系統(tǒng)變量Path】 → \rightarrow 【編輯系統(tǒng)變量Path】 → \rightarrow 【新建把路徑復(fù)制進(jìn)去點(diǎn)擊確定】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟1)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟2)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟3)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟4)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟5)

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5 添加系統(tǒng)環(huán)境變量(步驟6)

特別注意?。?! 我們?cè)谂渲猛晗到y(tǒng)環(huán)境變量后其實(shí)是沒(méi)有生效的,你需要重啟電腦來(lái)確保環(huán)境變量生效,如果你沒(méi)有重啟電腦刷新環(huán)境變量,即使你后續(xù)配置了庫(kù)文件和鏈接庫(kù)也會(huì)提示找不到對(duì)應(yīng)的 opencv_world450d.dll 動(dòng)態(tài)庫(kù),如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-5-1 未刷新環(huán)境變量導(dǎo)致的問(wèn)題

因此需要重啟電腦來(lái)使得環(huán)境變量生效

OK!以上就是 OpenCV 系統(tǒng)環(huán)境變量的配置,也就是在系統(tǒng)變量路徑中添加了一個(gè) OpenCV 的 bin 路徑

4.3 VS項(xiàng)目環(huán)境配置

我們接下來(lái)就去看看項(xiàng)目中該如何去配置,我們拿之前創(chuàng)建的 test 項(xiàng)目為例,如果我想要在這個(gè)項(xiàng)目中使用 opencv 讀取一張圖片并顯示,我該如何做呢?

上來(lái)我們就直接來(lái)編寫(xiě)程序,首先需要包含 opencv 的頭文件 opencv2/opencv.hpp

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-6 opencv頭文件找不到

可以看到編譯器提示頭文件找不到,那這是因?yàn)槲覀儾](méi)有告訴編譯器去哪里找 opencv,也就是沒(méi)有配置 opencv 的頭文件目錄,接下來(lái)我們配置下 opencv 的頭文件目錄

右鍵點(diǎn)擊解決方案 test,點(diǎn)擊屬性(或者直接點(diǎn)擊上面的小扳手),

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-7 打開(kāi)項(xiàng)目屬性頁(yè)

點(diǎn)擊進(jìn)來(lái)后可以看到該項(xiàng)目(test)的屬性頁(yè)面,那么這個(gè)屬性頁(yè)面是非常非常重要的,你可以在這里配置這個(gè)項(xiàng)目的所有東西,比如項(xiàng)目所依賴的頭文件目錄、庫(kù)文件目錄、鏈接的動(dòng)態(tài)庫(kù)等等,你可以把它理解為 Linux 上面的 CMakeLists.txt 或者 Makefile 文件

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-8 項(xiàng)目屬性頁(yè)

那一進(jìn)來(lái)其它的先不看,我們先來(lái)看下上面的兩個(gè)配置,一個(gè)是編譯模式的選擇,另外一個(gè)是編譯平臺(tái)的選擇,那你可能會(huì)疑問(wèn),前面的 活動(dòng) 又是什么意思呢?

那在 Visual Studio 項(xiàng)目的屬性頁(yè)面中,帶有 “(Active)” 標(biāo)簽的選項(xiàng)是指當(dāng)前處于活動(dòng)狀態(tài)的配置。這意味著在你進(jìn)行項(xiàng)目編譯、調(diào)試、運(yùn)行等操作時(shí),所使用的配置選項(xiàng)是標(biāo)記為 “(Active)” 的配置。

那么當(dāng)前我們是在 x64 平臺(tái)下的 Debug 編譯模式,因此就先配置 x64 和 Debug。那你可能會(huì)好奇,Debug 和 Release 編譯模式下項(xiàng)目所依賴的頭文件、庫(kù)文件不是都一樣嗎?為什么不選擇 “所有配置” 一起配置呢?

那之前有提到過(guò) Debug 和 Release 的區(qū)別,為了調(diào)試方便在 Debug 模式下我們是沒(méi)有進(jìn)行優(yōu)化的,而在 Release 模式下我們是使用了優(yōu)化的,想必你也猜到了,opencv 官方提供的 opencv 動(dòng)態(tài)庫(kù)其實(shí)是存在 Debug 和 Release 兩個(gè)的,在不同編譯模式下我們應(yīng)該選擇不同的動(dòng)態(tài)庫(kù),這點(diǎn)后面會(huì)提到,因此建議還是分開(kāi)配置為好

那我們先來(lái)解決頭文件目錄問(wèn)題,我們先找到我們下載的 opencv 安裝包的頭文件目錄,它在 opencv\build\include 下面,對(duì)于博主的完整路徑是 F:\project\lean\opencv\build\include

找到了 opencv 安裝包頭文件的路徑,我們來(lái)配置頭文件目錄,在打開(kāi)的項(xiàng)目屬性頁(yè)中,在【VC++目錄】中的【包含目錄】編輯添加 OpenCV 的 include 文件夾路徑:

F:\project\lean\opencv\build\include

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-9 包含目錄添加opencv頭文件路徑

點(diǎn)擊確定可以看到【包含目錄】中多了 opencv 的頭文件路徑,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-10 包含目錄成功添加opencv頭文件路徑

然后我們還需要在【C/C++】下面【常規(guī)】中的【附加包含目錄】編輯添加 OpenCV 的 include 文件夾路徑:

F:\project\lean\opencv\build\include

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-11 附加包含目錄添加opencv頭文件路徑

點(diǎn)擊確定可以看到【附加包含目錄】中多了 opencv 的頭文件路徑

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-12 附加包含目錄成功添加opencv頭文件路徑

那你可能會(huì)問(wèn),之前不是在【VC++目錄】中配置了頭文件目錄嗎?為什么還要再配置一次呢???

這是因?yàn)殡m然你可能在項(xiàng)目屬性頁(yè)的【VC++目錄】中配置了包含目錄使得你的項(xiàng)目能夠正常編譯。但是一般來(lái)說(shuō),還是推薦在【C/C++】 → \rightarrow 【常規(guī)】中配置【附加包含目錄】。這是因?yàn)樵谶@里設(shè)置的附加包含目錄會(huì)對(duì)整個(gè)項(xiàng)目中的源文件生效,而不需要針對(duì)每個(gè)源文件都單獨(dú)設(shè)置。這樣能夠提高代碼的可維護(hù)性,并且在項(xiàng)目需要擴(kuò)展或修改時(shí),更加方便管理。

此時(shí)再看代碼可以發(fā)現(xiàn)編譯器沒(méi)有提示找不到 opencv 的頭文件了,說(shuō)明我們添加成功了

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-13 代碼不再提示頭文件找不到

OK!頭文件添加成功了我們就來(lái)把后續(xù)的代碼完成,整體代碼如下:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-14 整體代碼

代碼非常簡(jiǎn)單就是利用 OpenCV 讀取一張圖片然后顯示,那你可能會(huì)好奇,代碼中圖片的路徑是根據(jù)相對(duì)目錄來(lái)指定的,那這個(gè)相對(duì)目錄是相對(duì)誰(shuí)而言的呢?

在 Visual Studio 中,相對(duì)目錄是相對(duì)于項(xiàng)目文件所在的文件夾來(lái)指定的。項(xiàng)目文件通常是具有 .vcxproj 擴(kuò)展名的文件,它包含有關(guān)項(xiàng)目的配置和設(shè)置信息。相對(duì)目錄是相對(duì)于這個(gè)項(xiàng)目文件所在的文件夾來(lái)進(jìn)行計(jì)算的。

例如,如果你的項(xiàng)目文件位于 F:\project\test\test\test.vcxproj,而你的圖片文件位于 F:\project\test\test\workspace\Lenna.png,那么在項(xiàng)目中引用圖片時(shí),相對(duì)路徑應(yīng)該是 workspace\bus.jpg。如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-15 相對(duì)路徑問(wèn)題

那我們直接按 Ctrl+F5 來(lái)執(zhí)行,可以看到編譯報(bào)錯(cuò)了,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-16 編譯出錯(cuò)

無(wú)法解析的外部符號(hào)…,那這個(gè)問(wèn)題主要是由于鏈接器(Linker)無(wú)法找到所需的函數(shù)的實(shí)際定義,而在代碼中該函數(shù)卻被引用了。

那你可能回想起來(lái)了,雖然我們添加了頭文件目錄,但是我們貌似并沒(méi)有添加庫(kù)文件目錄,沒(méi)有正確地鏈接上 OpenCV 庫(kù)呀,在 Visual Studio 中,我們需要將正確的 OpenCV 庫(kù)文件夾添加到項(xiàng)目屬性的庫(kù)目錄,并將所需的庫(kù)名稱添加到項(xiàng)目屬性的附加依賴項(xiàng)中。我們接下來(lái)就做這么一件事情

首先我們要找到庫(kù)文件的目錄,它在 opencv\build\x64\vc15\lib 下面,對(duì)于博主的完整路徑是 F:\project\lean\opencv\build\x64\vc15\lib

然后我們?cè)诖蜷_(kāi)的項(xiàng)目屬性頁(yè)中,在【VC++目錄】中的【庫(kù)目錄】編輯添加 OpenCV 的 lib 文件夾路徑:

F:\project\lean\opencv\build\x64\vc15\lib

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-17 庫(kù)目錄添加opencv庫(kù)文件路徑

點(diǎn)擊確定后可以看到【庫(kù)目錄】中多了 opencv 的庫(kù)文件路徑

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-18 庫(kù)目錄成功添加opencv庫(kù)文件路徑

那此時(shí)我們只是設(shè)置了庫(kù)文件目錄,需要具體鏈接的庫(kù)文件還沒(méi)有真正配置,我們接下來(lái)配置鏈接器

在我們打開(kāi)的項(xiàng)目屬性頁(yè)中,在【鏈接器】下面的【輸入】中的【附加依賴項(xiàng)】編輯添加需要鏈接的 OpenCV 庫(kù)文件:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-19 鏈接器添加opencv庫(kù)文件

那可能你會(huì)好奇我怎么知道鏈接的庫(kù)文件名稱呢,那其實(shí)在 opencv\build\x64\vc15\lib 庫(kù)文件目錄下就有 .lib 后綴結(jié)尾的兩個(gè)庫(kù)文件,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-20 opencv庫(kù)文件名稱

上面兩個(gè)庫(kù)文件就是我們需要鏈接的 opencv 庫(kù),那你可能會(huì)問(wèn)不是有 opencv_world450.libopencv_world450d.lib 兩個(gè)庫(kù)嘛,具體鏈接哪一個(gè)呢?還是說(shuō)都需要添加???

那這其實(shí)是 OpenCV 庫(kù)的兩個(gè)不同版本,分別用于 Release(Release 模式)和 Debug(Debug 模式)構(gòu)建。

  • opencv_world450.lib 是用于 Release 模式的庫(kù)文件。當(dāng)你在 Release 模式下構(gòu)建你的應(yīng)用程序時(shí),應(yīng)該鏈接到這個(gè)庫(kù)。
  • opencv_world450d.lib 是用于 Debug 模式的庫(kù)文件。當(dāng)你在 Debug 模式下構(gòu)建你的應(yīng)用程序時(shí),應(yīng)該鏈接到這個(gè)庫(kù)。

在 Visual Studio 項(xiàng)目中,根據(jù)你的編譯模式(Release 或 Debug),你需要設(shè)置鏈接器的庫(kù)依賴項(xiàng),分別鏈接到對(duì)應(yīng)的庫(kù)文件。如果在 Release 模式下編譯,確保鏈接到 opencv_world450.lib;如果在 Debug 模式下編譯,確保鏈接到 opencv_world450d.lib。這樣可以確保在不同的構(gòu)建模式下使用正確的庫(kù)。

由于博主的編譯模式是 Debug 模式,因此鏈接的是 opencv_world450d.lib 庫(kù),當(dāng)你編譯模式是 Release 模式時(shí),你需要選擇的是 opencv_world450.lib 庫(kù)

OK,庫(kù)文件路徑和對(duì)應(yīng)的鏈接庫(kù)配置完成了,我們?cè)侔?Ctrl+F5 執(zhí)行下

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖4-21 成功運(yùn)行

可以看到編譯通過(guò)了,而且圖像也正常顯示了,這說(shuō)明 opencv 庫(kù)的使用沒(méi)問(wèn)題了

OK!以上就是關(guān)于 OpenCV 庫(kù)的配置

4.4 總結(jié)

上面我們?cè)敿?xì)分析了在 Visual Studio 中如何使用 OpenCV 庫(kù),下面我們簡(jiǎn)單總結(jié)下如何在 Visual Studio 中使用一個(gè)第三方庫(kù)。總體可分為:系統(tǒng)環(huán)境變量配置和 Visual Studio 項(xiàng)目環(huán)境配置兩部分

1. 系統(tǒng)環(huán)境變量配置optional

這一步通常不是必須的,尤其是在使用靜態(tài)鏈接庫(kù)的情況下。但對(duì)于某些庫(kù),尤其是那些提供了可執(zhí)行文件的庫(kù)(例如 OpenCV),可能需要將其路徑添加到系統(tǒng)環(huán)境變量中,以便在終端中運(yùn)行可執(zhí)行文件時(shí)能夠正確找到依賴的庫(kù)文件。

2. Visual Studio 項(xiàng)目環(huán)境配置

2.1 包含目錄添加頭文件路徑 【VC++目錄】 → \rightarrow 【包含目錄】

這是為了在編譯時(shí)能夠找到第三方庫(kù)的頭文件。這通常是必須的,因?yàn)槟愕脑创a中會(huì)包含庫(kù)的頭文件以訪問(wèn)其函數(shù)和類(lèi)。

2.2 附加包含目錄中添加頭文件路徑 【C/C++】 → \rightarrow 【常規(guī)】 → \rightarrow 【附加包含目錄】

這一步是為了告訴編譯器在哪里找到你所使用的第三方庫(kù)的頭文件。將頭文件路徑添加到項(xiàng)目的 附加包含目錄 中,確保項(xiàng)目的每個(gè)源文件都能找到所需的頭文件。這提高了項(xiàng)目的可維護(hù)性,因?yàn)槟悴恍枰獮槊總€(gè)源文件都手動(dòng)設(shè)置包含路徑。

2.3 庫(kù)目錄添加庫(kù)文件路徑 【VC++目錄】 → \rightarrow 【庫(kù)目錄】

這是為了告訴鏈接器在哪里找到庫(kù)文件。通常來(lái)說(shuō),你需要將庫(kù)文件的路徑添加到項(xiàng)目的 庫(kù)目錄 中,以便鏈接器能夠找到所需的庫(kù)文件。

2.4 鏈接器設(shè)置添加鏈接庫(kù) 【鏈接器】 → \rightarrow 【輸入】 → \rightarrow 【附加依賴項(xiàng)】

這是為了告訴鏈接器需要鏈接哪些庫(kù)文件。根據(jù)你使用的庫(kù),你可能需要在項(xiàng)目的 附加依賴項(xiàng) 中添加相應(yīng)的庫(kù)文件名,如 opencv_world450.lib。

5. 已有項(xiàng)目添加

假設(shè)我在 Linux 上面開(kāi)發(fā)了一個(gè)新的項(xiàng)目,后續(xù)我想在 Windows 下面開(kāi)發(fā),我該如何把已有項(xiàng)目添加到 Visual Studio 中繼續(xù)開(kāi)發(fā)呢?

這邊拿一個(gè)非常簡(jiǎn)單的示例說(shuō)明下,假設(shè) Linux 下開(kāi)發(fā)的項(xiàng)目文件目錄結(jié)構(gòu)如下:

src
├─common
│  ├─ilogger.cpp
│  └─ilogger.hpp
└─main.cpp

整個(gè)項(xiàng)目文件非常簡(jiǎn)單(為了方便說(shuō)明,實(shí)際情況肯定復(fù)雜得多),只包含一個(gè) src 文件夾存放著所有的源代碼,在 src 文件夾下又包含一個(gè) common 文件夾和一個(gè) main.cpp 文件

common 文件夾下有 ilogger.hpp 和 ilogger.cpp 兩個(gè)文件,它們其實(shí)來(lái)源于 https://github.com/shouxieai/tensorRT_Pro/tree/main/src/tensorRT/common

這兩個(gè)文件是杜老師實(shí)現(xiàn)的,功能是為用戶提供了一個(gè)日志庫(kù),該庫(kù)支持多種日志級(jí)別,并提供了文件操作、日期和時(shí)間、字符串操作、顏色轉(zhuǎn)換等輔助功能。此外,它還考慮了跨平臺(tái)的需求,為 Windows 和 Linux 提供了特定的實(shí)現(xiàn)。

由于它的日志打印包含時(shí)間、文件行號(hào)非常適合調(diào)試,同時(shí)還提供了一些小工具函數(shù),因此博主經(jīng)常將它包含在自己的項(xiàng)目中。那具體代碼實(shí)現(xiàn)其實(shí)并不重要,我們的主要目的還是說(shuō)如何把它添加到 Visual Studio 中

main.cpp 中的內(nèi)容非常簡(jiǎn)單,就是利用 ilogger 中的 INFO 函數(shù)進(jìn)行 “Hello World” 打印并打印當(dāng)前的時(shí)間,其代碼如下:

#include <iostream>
#include <common/ilogger.hpp>
using namespace std;

int main() {
	
	INFO("Hello World");
	
	string now = iLogger::time_now();
	
	INFO("time now = %s", now.c_str());

	return 0;
}

接下來(lái)我們重點(diǎn)來(lái)看如何把已有項(xiàng)目添加到 Visual Studio 中,首先我們?cè)?Visual Studio 中新建一個(gè)項(xiàng)目 test,然后將 Linux 下所有與項(xiàng)目相關(guān)的文件都放在與 test.vcxproj 項(xiàng)目文件的同級(jí)目錄下,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-1 復(fù)制Linux項(xiàng)目文件

那此時(shí)你就犯難了,怎么在解決方案 test 中把 src 下面的這些 C++ 文件都添加進(jìn)去呢?

明明我們把整個(gè) src 文件夾都復(fù)制過(guò)來(lái)了,為什么在解決方案中看不到任何文件呢?

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-2 解決方案沒(méi)有src文件夾顯示

那其實(shí)是因?yàn)槟氵€沒(méi)有把它們添加到項(xiàng)目中去,在 Visual Studio 解決方案窗口中,文件的顯示是基于項(xiàng)目文件(.vcxproj)的結(jié)構(gòu)和內(nèi)容的。如果你在 .vcxproj 的同級(jí)目錄下創(chuàng)建了一個(gè)文件夾,并在其中添加了一些 C++ 文件,但在解決方案窗口中看不到文件的顯示,是因?yàn)檫@些文件尚未被添加到項(xiàng)目中。

在 Visual Studio 中,文件需要添加到項(xiàng)目中,才能在解決方案窗口中正確顯示和管理。這是因?yàn)榻鉀Q方案窗口顯示的是項(xiàng)目的文件結(jié)構(gòu),而不是文件系統(tǒng)中的實(shí)際文件結(jié)構(gòu)。

那我們?cè)撊绾翁砑幽兀?/p>

我們可以點(diǎn)擊解決方案資源管理器的小扳手的左邊的小圖標(biāo)【顯示所有文件】,然后就可以看到與 test.vcxproj 同級(jí)目錄下的所有文件了,接下來(lái)我們右鍵點(diǎn)擊 src,選擇【包括在項(xiàng)目中】,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-3 添加src文件夾

添加完成后再點(diǎn)擊小圖標(biāo)【顯示所有文件】回到之前的解決方案窗口,此時(shí)可以看到 src 文件夾下的所有文件都被包含進(jìn)來(lái)了,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-4 添加成功

值得注意的是 Visual Studio 會(huì)將添加進(jìn)來(lái)的所有 .cpp 文件全部放到源文件下,而所有的 .hpp 文件全部放到 頭文件下,我們可以使用 “新建篩選器” 來(lái)創(chuàng)建邏輯上的文件夾結(jié)構(gòu),以更好的組織項(xiàng)目文件

博主還是喜歡在 Linux 下的文件目錄結(jié)構(gòu),因此【右鍵源文件】 → \rightarrow 【添加】 → \rightarrow 【新建篩選器】 → \rightarrow 【命名common】 → \rightarrow 【把ilogger.hpp和ilogger.cpp移過(guò)來(lái)】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-5 創(chuàng)建篩選器

最終的目錄結(jié)構(gòu)如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-6 最終目錄結(jié)構(gòu)

那你可能會(huì)好奇,篩選器是個(gè)啥玩意?我在這邊創(chuàng)建篩選器移動(dòng)文件會(huì)不會(huì)影響到實(shí)際的文件結(jié)構(gòu)呢???

那在 Visual Studio 的解決方案中,“新建篩選器” 是一種組織項(xiàng)目文件的方式,類(lèi)似于文件夾,但在實(shí)際的文件系統(tǒng)中并不會(huì)創(chuàng)建真正的文件夾。它主要用于在解決方案中對(duì)項(xiàng)目文件進(jìn)行邏輯上的分組和組織,以便更好地管理和維護(hù)項(xiàng)目。(from chatGPT)

當(dāng)你在解決方案中創(chuàng)建一個(gè)新的篩選器時(shí),它會(huì)在解決方案資源管理器中顯示為一個(gè)文件夾圖標(biāo),但并不會(huì)在文件系統(tǒng)中創(chuàng)建實(shí)際的文件夾。你可以在篩選器下添加項(xiàng)目文件,這些文件實(shí)際上會(huì)存儲(chǔ)在指定的項(xiàng)目文件夾內(nèi),但它們?cè)?Visual Studio 中的展示方式更加組織化。

使用篩選器的主要好處是在項(xiàng)目變得龐大時(shí)能夠更好地組織項(xiàng)目文件,使其更易于導(dǎo)航和維護(hù)。你可以根據(jù)自己的項(xiàng)目需求,將不同類(lèi)型的文件、相關(guān)的代碼文件等放置在不同的篩選器下。

我們點(diǎn)開(kāi) main.cpp 中發(fā)現(xiàn)頭文件無(wú)法打開(kāi),如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-7 頭文件無(wú)法打開(kāi)錯(cuò)誤

那這是個(gè)老問(wèn)題了,在配置 opencv 的時(shí)候我們也遇到過(guò),就是頭文件目錄問(wèn)題

你并沒(méi)有告訴編譯器這個(gè)頭文件要去哪個(gè)目錄下找,編譯器找不到當(dāng)然就報(bào)錯(cuò)咯。因此我們需要在項(xiàng)目屬性頁(yè)的【VC++目錄】 → \rightarrow 【包含目錄】和【C/C++】 → \rightarrow 【常規(guī)】 → \rightarrow 【附加包含目錄】中都添加 ilogger.hpp 的頭文件目錄,在博主的環(huán)境中,這個(gè)路徑位于 F:\project\test\test\src

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++
vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-8 包含頭文件路徑

我們?cè)俅位氐?main.cpp 中可以看到?jīng)]問(wèn)題了,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-9 成功包含ilogger頭文件

由于這個(gè)簡(jiǎn)單的項(xiàng)目并不需要使用庫(kù)文件,因此我們不需要配置庫(kù)文件目錄和鏈接對(duì)應(yīng)的庫(kù),接下來(lái)我們按 Ctrl+F5 執(zhí)行,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-10 執(zhí)行出錯(cuò)

可以發(fā)現(xiàn)存在一些問(wèn)題,那這個(gè)問(wèn)題是由于 common 下面的兩個(gè)文件導(dǎo)致的

雖然日志文件對(duì) Windows 做了特定實(shí)現(xiàn),但是可以看到還是存在一些移植問(wèn)題的,那往后的具體解決方法是單純針對(duì)于這個(gè)特定項(xiàng)目而言的,大家可以做簡(jiǎn)單的了解,主要是把握住前面的內(nèi)容即如何把一個(gè)已有項(xiàng)目添加到 Visual Studio 中

OK!我們來(lái)看存在的問(wèn)題,主要分為兩個(gè)問(wèn)題,我們一個(gè)個(gè)解決

問(wèn)題1:C4996 ‘sprintf’: This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

分析:使用 sprintf 格式化字符串出錯(cuò), sprintf 函數(shù)在處理字符串時(shí)存在一些安全性問(wèn)題,因?yàn)樗鼪](méi)有提供足夠的保護(hù)機(jī)制來(lái)防止緩沖區(qū)溢出。為了增加代碼的安全性,Visual Studio 推薦使用 sprintf_s 函數(shù)代替sprintf。

解決:錯(cuò)誤信息中其實(shí)提到了幾個(gè)解決辦法,最簡(jiǎn)單的就是使用 sprintf_s 函數(shù)來(lái)替換 sprintf 函數(shù),另外就是 使用 _CRT_SECURE_NO_WARNINGS 宏

博主在這里選擇第二種解決方法,使用 _CRT_SECURE_NO_WARNINGS 宏,在項(xiàng)目屬性頁(yè)的 【C/C++】 → \rightarrow 【預(yù)處理器】 → \rightarrow 【預(yù)處理器定義】 → \rightarrow 【添加_CRT_SECURE_NO_WARNINGS 】

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-11 預(yù)處理器添加

問(wèn)題2:C4996 ‘_getsystime’: This function or variable has been superceded by newer library or operating system functionality. Consider using GetLocalTime instead. See online help for details.

分析:這個(gè)錯(cuò)誤是由于你使用了過(guò)時(shí)的函數(shù) _getsystime,而新的庫(kù)或操作系統(tǒng)功能已經(jīng)取代了它。建議你考慮使用 GetLocalTime 函數(shù)來(lái)替代 _getsystime。GetLocalTime 函數(shù)是 Windows API 中的一個(gè)函數(shù),用于獲取本地時(shí)間。

解決:這個(gè)需要我們小改 ilogger.cpp 中的代碼,如下所示

// ===== ilogger.cpp 50行 =====
#if defined(U_OS_WINDOWS)
#define __GetTimeBlock						\
		SYSTEMTIME  t;						\
		GetLocalTime(&t);
#endif

// ===== ilogger.cpp 100行 =====
string date_now() {
    char time_string[20];
    __GetTimeBlock;

    sprintf(time_string, "%04d-%02d-%02d", t.wYear, t.wMonth, t.wDay);
    return time_string;
}

string time_now() {
    char time_string[20];
    __GetTimeBlock;

    sprintf(time_string, "%04d-%02d-%02d %02d:%02d:%02d", t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond);
    return time_string;

修改完成后再去 Ctrl+F5 執(zhí)行下,可以看到如下結(jié)果:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖5-12 成功運(yùn)行

可以看到運(yùn)行成功了,成功打印出了 Hello World 和當(dāng)前的時(shí)間

OK!以上就是關(guān)于如何在 Visual Studio 中添加一個(gè)已有的項(xiàng)目

6. Tips

這個(gè)小節(jié)主要分享 Visual Studio 使用過(guò)程中的一些小技巧

6.1 常用快捷鍵

  • Ctrl+K Ctrl+C 注釋?zhuān)?Ctrl+K Ctrl+U 取消注釋

  • Alt+↑,Alt+↓ 上下移動(dòng)該行

  • shift+ → \rightarrow 選擇

  • ctrl+shift+enter 在下一行插入,ctrl+enter 在上一行插入

  • 更多快捷鍵參考:快捷鍵大全

6.2 字體和顏色選擇

  • 博主使用 VSCode 習(xí)慣了 Consolas 字體,因此在【菜單欄】 → \rightarrow 【工具】 → \rightarrow 【選項(xiàng)】 → \rightarrow 【常規(guī)】 → \rightarrow 【字體和顏色】
  • 參考:更改字體和顏色

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖6-1 字體和顏色選擇

6.3 配置編譯路徑

那你可能會(huì)好奇我們?cè)诰幾g執(zhí)行的過(guò)程中產(chǎn)生的中間文件和可執(zhí)行文件在哪里呢?

其實(shí)你如果仔細(xì)觀察我們的項(xiàng)目文件夾,會(huì)發(fā)現(xiàn)不知不覺(jué)中多了很多其余的文件,只是我們之前都沒(méi)有關(guān)注而已,其實(shí)編譯產(chǎn)生的中間文件在 .vcxproj 的同級(jí)目錄下,由于博主使用的是 Debug 編譯模式,平臺(tái)是 x64,那么中間文件就在 x64/Debug 文件夾下

編譯最終產(chǎn)生的可執(zhí)行文件在 .sln 的同級(jí)目錄下,由于博主使用的是 Debug 編譯模式,平臺(tái)是 x64,那么可執(zhí)行文件就在 x64/Debug 文件夾下

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖6-2 生成的可執(zhí)行文件和中間文件路徑

我們配置編譯路徑主要是為了防止文件污染,確保生成的中間文件和可執(zhí)行文件都在我們指定的位置

我們現(xiàn)在希望生成的中間文件存儲(chǔ)在 .vcxproj 同級(jí)目錄下的 objs 文件夾下,可執(zhí)行文件存儲(chǔ)在 workspace 文件夾下,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖6-3 希望生成的可執(zhí)行文件和中間文件路徑

那我們?cè)撊绾闻渲媚兀?/p>

首先先點(diǎn)開(kāi)項(xiàng)目屬性頁(yè),在【常規(guī)】 → \rightarrow 【輸出目錄】/【中間目錄】可以配置對(duì)應(yīng)路徑

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖6-4 配置編譯路徑

可以看到它有默認(rèn)的路徑,是通過(guò)一些宏定義來(lái)實(shí)現(xiàn)的:

$(SolutionDir):解決方案名,即 .sln 所在路徑

$(Platform):解決方案平臺(tái)名稱,如 x86、x64

$(Configuration):當(dāng)前的編譯配置名稱,如 Release、Debug

$(ProjectName):當(dāng)前工程(項(xiàng)目)名稱,如示例中的 test

(補(bǔ)充)我們可以在:項(xiàng)目(鼠標(biāo)右鍵)→屬性→配置屬性→常規(guī)→輸出目錄(點(diǎn)擊下拉箭頭)→編輯→宏中看到相應(yīng)名稱和值的一一對(duì)應(yīng)關(guān)系。
參考自:vs2017+配置工程的編譯路徑(輸出目錄和中間目錄)

那么我們也可以利用這些宏定義來(lái)實(shí)現(xiàn)對(duì)應(yīng)的編譯路徑指定,如下圖所示:

vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++
vs2017,環(huán)境配置,visual studio,opencv,環(huán)境配置,windows,c++

圖6-5 編譯路徑指定

大家寫(xiě)完之后可以對(duì)照下面輸出的值,看是不是自己真正想要的路徑

指定完成后再去執(zhí)行代碼后,你會(huì)發(fā)現(xiàn)編譯的中間文件會(huì)放在 objs 下,可執(zhí)行文件放在 workspace 下,清清爽爽,看起來(lái)非常舒服??

結(jié)語(yǔ)

本篇博客簡(jiǎn)單分享并記錄了博主在學(xué)習(xí)和使用 Visual Studio 開(kāi)發(fā) C++ 項(xiàng)目時(shí)的一些基礎(chǔ)知識(shí),首先分享了 Visual Studio 的安裝和創(chuàng)建一個(gè)新項(xiàng)目,然后以 opencv 庫(kù)為例分享了第三方庫(kù)的使用,主要是頭文件和庫(kù)文件路徑的包含,以及鏈接器的庫(kù)文件鏈接,接下來(lái)分享了一個(gè)已有項(xiàng)目如何添加到 Visual Studio 中,我們需要把源文件都包含到項(xiàng)目中,并且指定項(xiàng)目中所使用的頭文件和庫(kù)文件路徑以及對(duì)應(yīng)的庫(kù),最后就是博主在使用過(guò)程中的學(xué)到的一些小技巧。

由于博主也只是初學(xué)者,后續(xù)有新的發(fā)現(xiàn)再和大家分享吧,這次就先到這里了,感謝各位看到最后,創(chuàng)作不易,讀后有收獲的看官請(qǐng)幫忙點(diǎn)個(gè)????

下載鏈接

  • Visual Studio 2017安裝包【pwd:1234】
  • OpenCV安裝包【pwd:1234】

參考

  • Visual Studio和Visual Studio Code(VSCode)的區(qū)別及如何選擇

  • Visual Studio中Debug與Release以及x86、x64、Any CPU的區(qū)別

  • VS2017配置 opencv 教程(超詳細(xì)?。。。?/p>

  • 一文搞定 Visual Studio 配置 OpenCV 環(huán)境

  • Visual Studio快捷鍵大全

  • Visual Studio更改字體和顏色

  • vs2017+配置工程的編譯路徑(輸出目錄和中間目錄)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-718492.html

到了這里,關(guān)于Visual Studio 2017安裝和項(xiàng)目配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在Visual Studio 2017上配置Glut

    在Visual Studio 2017上配置Glut

    ?上篇?已經(jīng)介紹了如何配置OpenGL,但缺點(diǎn)是每次新建一個(gè)項(xiàng)目時(shí),都應(yīng)重新安裝 “nupengl.core.redist” 與 “nupengl.core” 這兩個(gè)文件,這在有網(wǎng)的情況下還是可以實(shí)現(xiàn)的,但不是一個(gè)長(zhǎng)久之計(jì)?,F(xiàn)在介紹另一種方法,用Glut庫(kù)的一個(gè)開(kāi)源替代品:Freeglut,它是由Pawel W. Olszta在199

    2024年02月10日
    瀏覽(13)
  • Visual Studio Code (VS Code) – C++ 入門(mén)(包含 vscode配置c++環(huán)境)

    Visual Studio Code (VS Code) – C++ 入門(mén)(包含 vscode配置c++環(huán)境)

    —— 基于 VS Code 官方文檔的全面的、具體的入門(mén)級(jí)教程 歡迎訪問(wèn)作者的主頁(yè):Xi Xu’s Home Page 本教程由文章(本文)和視頻組成。 在本教程中,您將為使用 UCRT64 中的 GCC C/C++ 編譯器(gcc/g++)和 GDB 調(diào)試器配置 VS Code 來(lái)創(chuàng)建在 Windows 上運(yùn)行的程序。 配置 VS Code 后,您將在 V

    2024年02月01日
    瀏覽(32)
  • visual studio 2017 運(yùn)行的程序關(guān)閉后不能再運(yùn)行?(visual studio建立項(xiàng)目之后退出,如何再次完整打開(kāi)項(xiàng)目?)

    visual studio 2017 運(yùn)行的程序關(guān)閉后不能再運(yùn)行?(visual studio建立項(xiàng)目之后退出,如何再次完整打開(kāi)項(xiàng)目?)

    在你儲(chǔ)存項(xiàng)目的文件夾里面應(yīng)該是這樣的 里面.vcxproj后綴名的就是原來(lái)創(chuàng)建的項(xiàng)目,直接打開(kāi)這個(gè)頭文件源文件就會(huì)一起出來(lái)了! 真的管用,親測(cè)有效。

    2024年02月13日
    瀏覽(40)
  • 關(guān)于Microsoft Visual Studio 2017 找不到或打不開(kāi) Visual Studio Installer 的解決方法, 或不知名原因?qū)е耉S installer閃退的一種方法

    關(guān)于Microsoft Visual Studio 2017 找不到或打不開(kāi) Visual Studio Installer 的解決方法, 或不知名原因?qū)е耉S installer閃退的一種方法

    Error Information AppInsightsEvent Name = vs/setup/bootstrapper/error Description = DirectoryNotFoundException TelemetrySession = ‘53295939-9be5-4f6b-a7eb-b42a3dbf1c8a’ Started = True OptIn=True IsInitialized = False Cloned = False WatsonEventType = VisualStudioNonFatalErrors2 UTC time = 2022-01-03T03:51:59 Exception: System.IO.DirectoryNotFoundException

    2024年02月04日
    瀏覽(29)
  • Microsoft Visual Studio C++2017+Windows 11 SDK環(huán)境

    Microsoft Visual Studio C++2017+Windows 11 SDK環(huán)境

    Microsoft Visual Studio C++2017在Windows 11環(huán)境下并沒(méi)有攜帶SDK環(huán)境包,所以需要單獨(dú)的安裝一下SDK。 單獨(dú)安裝SDK對(duì)強(qiáng)迫癥時(shí)比較友好的,因?yàn)樵贛icrosoft Visual Studio C++2022安裝包里面可以選擇安裝Windows 11 SDK,但是,默認(rèn)安裝在Microsoft Visual Studio安裝目錄的平級(jí)目錄下面,并且安裝路徑

    2024年02月05日
    瀏覽(55)
  • <Visual Studio 2019安裝及環(huán)境配置教程>

    <Visual Studio 2019安裝及環(huán)境配置教程>

    目錄 1.Visual?Studio 2019下載安裝: 1.1?進(jìn)入官網(wǎng) 1.2?選擇所需Visual Studio 2019安裝包 1.3? Visual?Studio 2019?版本說(shuō)明 1.4?點(diǎn)擊下載、安裝 1.5?登錄賬戶 1.6?使用演示 2.寫(xiě)在最后的話:? 后記:●由于作者水平有限,文章難免存在謬誤之處,敬請(qǐng)讀者斧正,俚語(yǔ)成篇,懇望指教! ?

    2024年02月14日
    瀏覽(47)
  • Visual Studio 2017 + ObjectARx2019 + AutoCAD2020環(huán)境搭建與工程編譯問(wèn)題處理

    Visual Studio 2017 + ObjectARx2019 + AutoCAD2020環(huán)境搭建與工程編譯問(wèn)題處理

    注:以上所有安裝包,序列號(hào),注冊(cè)機(jī)等資料均可私信我,免費(fèi)獲取,共同進(jìn)步; 1、安裝visual studio 2017; 2、安裝AutoCAD2020;這里ObjectArx2019對(duì)應(yīng)了兩個(gè)CAD版本,默認(rèn)是AutoCAD2019,我采用AutoCAD2020也可以; 3、安裝ObjectARXWizard2019.msi;這里默認(rèn)的安裝路徑是“C:ObjectARX”,為了避免后

    2024年02月10日
    瀏覽(26)
  • 環(huán)境搭建:Visual Studio的安裝和創(chuàng)建C++項(xiàng)目

    環(huán)境搭建:Visual Studio的安裝和創(chuàng)建C++項(xiàng)目

    ?? 作者簡(jiǎn)介:專(zhuān)注于C/C++高性能程序設(shè)計(jì)和開(kāi)發(fā),理論與代碼實(shí)踐結(jié)合,讓世界沒(méi)有難學(xué)的技術(shù)。 ?? ??? CSDN實(shí)力新星,社區(qū)專(zhuān)家博主 ?? ?? 專(zhuān)欄介紹:從零到c++精通的學(xué)習(xí)之路。內(nèi)容包括C++基礎(chǔ)編程、中級(jí)編程、高級(jí)編程;掌握各個(gè)知識(shí)點(diǎn)。 ?? ?? 專(zhuān)欄地址:C++從零

    2024年02月12日
    瀏覽(21)
  • Visual Studio Code安裝VUE 3.0項(xiàng)目及環(huán)境搭建

    Visual Studio Code安裝VUE 3.0項(xiàng)目及環(huán)境搭建

    為VS Code安裝 Node.JS 并安裝部署VUE 及開(kāi)發(fā)腳手架,之后部署第一個(gè)demo項(xiàng)目 1. Node.js 官方網(wǎng)站下載Node.js,選擇穩(wěn)定版下載,不要選擇最新版 ????????Node.js (nodejs.org) 2. ?2.?下載后開(kāi)始安裝,我的安裝目錄為:C:Codingnodejs 因?yàn)樵趫?zhí)行例如npm install webpack -g等命令全局安裝的時(shí)候

    2024年02月07日
    瀏覽(25)
  • Unity和Visual studio開(kāi)發(fā)調(diào)試環(huán)境配置-工具插件安裝和配置

    Unity和Visual studio開(kāi)發(fā)調(diào)試環(huán)境配置-工具插件安裝和配置

    在Unity開(kāi)發(fā)中,常用C#腳本進(jìn)行功能開(kāi)發(fā),需要用到Visual Studio進(jìn)行開(kāi)發(fā)和調(diào)試,需要分別在Unity3d和Visual Studio中安裝插件和工具才能更好的進(jìn)行開(kāi)發(fā)和調(diào)試。 visual studio中“工具”→“獲取工具和功能”,打開(kāi)visual studio安裝程序 安裝Unity開(kāi)發(fā)相關(guān)的內(nèi)容,如下選擇,主要就是“

    2024年02月04日
    瀏覽(116)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包