vs配置屬性管理器(轉)


^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

date:2018.07.17

在vs中使用Qt、openCv等庫都需要進行相應的屬性配置,來設置C/C++的附加包含目錄、鏈接器的附加依賴項等。為了不重復的對每一個項目工程進行重復配置,需要自己來新建一個項目屬性列表。配置完成后保存,然后在每次新建工程后,手動添加現有屬性表即可。

方法:視圖 --> 其它窗口 --> 屬性管理器 -->  --> 添加新項目屬性表 --> 進行相關配置 --> 保存 --> 添加現有屬性表。

下面進行Vs2013 + Qt5.7.1 + openCv3.0的屬性配置。(有空繼續)

——————————————

date:2018.07.24(看來配置QT+OpenCv是要接着拖了=_=)

同事使用屬性表文件.props時遇到了一些問題,這里單獨寫一下使用別人的屬性表的方法:

第一步,在屬性管理器中添加現有屬性表。

可以看到屬性管理器里有這么一坨,還有一個項目 -> 屬性。。。那么VS會使用哪一個屬性配置呢?

具體這幾個分別是什么作用我也沒去學習呢(歡迎留言)。。。現在只需要知道VS會默認使用項目 -> 屬性中的配置,所以要把新添加的屬性表的配置內容同步至這里。方法:檢查需要更改配置的選項,選擇“從父級或默認項目繼承”。

遺留問題:如何對x64和x86平台分別進行屬性配置?屬性表改了x64后發現x86也會跟着改變,怎么辦???

另外,有一個問題還沒搞懂,我整理后再發出來*******************88888888888

——————————————

***************************************************分割線*************************************************

date:2018.07.23

學習一下vs的項目屬性配置項:

>1. 首先,需要清楚解決方案和項目文件的包含關系:新建一個C++項目xia,解決方案命名為wuhao:可以看到文件夾結構為../wuhao/xia/,即項目文件夾位於.sln文件的同級目錄下,解決方案文件夾包含所有內容。如果在此解決方案下,新建另一個項目2013(當然,文件夾../2013與../xia位於同一級目錄下),解決方案管理器視圖如下:

 

這時分別對項目xia和項目2013進行Debug / Release ,發現有多個Debug / Release 文件夾:

以Debug為例,解決方案文件夾../wuhao下的Debug文件夾內的內容為:——存放的是可執行文件.exe和.dll文件

看一下項目文件夾../xia:

../xia下的Debug文件夾內的內容為:——存放的是中間編譯結果.obj

————————————

發散一下:在使用別人的工程文件時,經常需要配置一堆屬性。然而使用自己新建的項目屬性表xxx.props時,總是會出現錯誤。為什么呢?

先搞懂拷貝來的工程文件包含的配置文件:有兩種——解決方案的配置文件.sln、項目的配置文件.vcxproj。.sln主要是管理解決方案里面的多個項目的.vcxproj。一般沒有.sln也可以直接打開.vcxproj,也可以重新生成sln。.vcxproj管理的是工程中的細節,比如包含文件、引用庫、附加依賴項等。

————————————

>2. 另外,常用項目屬性和系統配置變量關系:

注:項目屬性設置的目錄起點為項目配置文件所在位置,即為項目文件夾下層目錄

注意哦,這里說的只有目錄~~~

項目的默認屬性頁設置:

配置屬性 -> 常規:

所以在Debug時會在解決方案../wuhao/文件夾內生成輸出目錄../wuhao/Debug/文件夾;在項目文件夾../wuhao/xia/文件夾內生成中間目錄../wuhao/xia/Debug/文件夾;在輸出目錄../wuhao/Debug/文件夾內生成目標文件../wuhao/Debug/xia.exe;

鏈接器 -> 常規:

這里的$(OutDir)即為輸出目錄定義的$(Solution)$(Configuration)\,$(TargetName)為目標文件名定義的$(ProjectName),$(TargetExt)為目標文件擴展名定義的.exe。

 另外注意,$(TargetDir)和$(TargetPath)的值是在輸出文件.exe生成后才確定的。

調試:

工作目錄:可以看到工作目錄的屬性為$(ProjectDir),即../wuhao/xia/。它的作用是:程序運行后唯一識別的默認目錄(即程序只認識這個目錄)。例如:程序運行中生成一個.csv文件,在創建時只指定了文件名而未指定路徑,那么它就默認生成在工作目錄內。一般也會把插件的動態鏈接文件.dll放在這里。

命令:這個屬性表示調試器要啟動的exe文件的全名(包含路徑名),默認為$(TargetPath)。

————————————————

補充一下vs的工作目錄:VS中的工作目錄的設置是給調試用的,也即你啟動調試后,啟動一個新進程,自動把這個新進程的工作目錄設置為vs項目屬性中的工作目錄,然后新進程啟動對應的exe程序。但是如果不使用vs的調試啟動exe,而是直接雙擊exe文件啟動一個新進程時,會自動把這個新進程的工作目錄設置為exe文件所在的目錄,這是和vs啟動調試不同的地方。所以如果發布的時候不把工作目錄內的東西拷到exe所在的目錄內,就會運行出錯,因為此時工作目錄不再是vs中設置的了,而是exe文件所在的目錄。最后,說一下,vs中默認的vc++工程的工作目錄項目的值是空的,代表默認是vs工程所在目錄即.vcproj文件所在目錄。

————————————————

鏈接器 -> 輸入 -> 附加依賴項:

此項是設置程序鏈接時使用的靜態鏈接庫.lib,相當於鏈接已經編譯好了的“代碼”。由此我們可以簡單的認為這些庫就相當於我們自己寫的.cpp文件,只不過這些庫是編譯好了的.cpp而已(這里只需要庫名稱即可,搜索路徑在其他地方設置:鏈接器 -> 常規 -> 附加庫目錄)。

“附加依賴性的設置”等同於在代碼中寫“#pragma comment(lib, "庫名稱.lib") ”語句,如果使用相對路徑則如下:

#pragma comment(lib,"..\\debug\\TestLib.lib");其中的反斜杠要用雙反斜杠,因為它是由程序解釋的雙引號包括的字符串,需要轉義一下,要區別include,#include "..\TestVideoApplication.h"中並不是由程序解釋的字符串,所以不用轉義。

 

**************************************************************************************************

可參考:MSDN Working with Project Properties

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM