VS工程配置中的一些常用概念

VS工程配置中一些常用概念

在看這篇文章之前首先思考幾個問題:
1、什麼是解決方案?爲什麼要有解決方案?
2、我想引用的頭文件和我的cpp文件不在同一個文件夾,我改怎麼辦?能直接引用嗎?
3、在配置opencv的時候需要配置的那些庫目錄、包含目錄到底是怎麼回事?

思考完上述問題,下面對上述問題進行解答,並介紹一些vs在工程配置的時候常用的一些做法和概念。儘量做到知其然,知其所以然。

一、解決方案(solution)與工程(project)

簡單的說解決方案就是多個工程的集合。solution存在的目的就是爲了各個project之間方便的共享文件和代碼庫。假設我有多個project都需要用到一個liblinear的代碼庫,我不要每個項目中都加載這個庫。另外,對於大型的工程項目,爲了方便代碼的管理和閱讀,往往將一個solution中的所.cpp和.hpp文件都集中放在一個文件夾中,然後讓多個project直接包含這個文件夾即可。下面以caffe工程作爲實例,講解一下caffe的文件管理層次和構造。

下圖是caffe的solution:
這裏寫圖片描述

caffe文件夾下的文件:
這裏寫圖片描述

這裏重點關注文件夾下的include、src、Windows文件夾。include存放的是整個solution所有的頭文件,src存放的是整個solution所有的源文件(.cpp),window存放的是所有的project文件。如下圖所示:

include文件夾下的內容:
這裏寫圖片描述

src文件夾下的內容:
這裏寫圖片描述

Windows文件夾下的內容:
這裏寫圖片描述

二、VS中VC++目錄中各個目錄的作用

這裏寫圖片描述
上圖是一般的VS工程需要配置的各個目錄。

1、可執行文件目錄

搜索可執行文件的目錄,對應於環境變量PATH,

2、包含目錄

對應於環境變量 INCLUDE
搜索在源代碼中引用的包含文件的目錄,即頭文件的目錄。例如#include

3、引用目錄

在該窗口中顯示的目錄設置是 Visual Studio 將搜索在源代碼文件中通過 #using 引用的程序集和模塊(元數據)文件的目錄。對應於環境變量 LIBPATH。

4、庫目錄

在該窗口中顯示的目錄設置是 Visual Studio 將搜索庫(包括運行時庫)的目錄。對應於環境變量 LIB。簡而言之,這個目錄就是尋找.lib文件的目錄。
如果設置錯誤,會link error,提示”找不到XXX.lib”。
另外,該設置不適用於.obj 文件;若要鏈接到 .obj 文件,請在“鏈接器”->“常規”屬性頁中,選擇“附加庫目錄”,然後指定.obj文件的路徑。

5、附加依賴項

C++的庫會把函數、類的聲明放在.h中,實現放在.cpp或.cc中。編譯之後,.cpp,.cc,.c會被打包成一個.lib文件,這樣可以保護源代碼。所以,要使用一個庫,除了要include他的頭文件以外,還要在鏈接過程中把lib加進去。這個就是在附加鏈接庫中設置。

6、有了庫目錄爲何還要附加依賴項?

庫目錄只是查找目錄,而我們具體使用哪一個.lib需要指明的,如果不在附加依賴項裏填上,就需要在代碼裏用#pragma comment(lib, “xxx.lib”)來手動指定了。寫代碼讀寫一個文件需要寫明文件名,這個文件名就相當於那個lib , 但讀寫這個文件可以不寫全路徑,這是因爲有庫目錄的存在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章