修复被破坏的 vs 工程设置(续)
緣起
在上一篇文章——《修復(fù)被破壞的 vs 工程設(shè)置》中,我分享了修復(fù)被破壞的 vs 工程設(shè)置的實(shí)戰(zhàn)。本以為圓滿解決了問(wèn)題,沒(méi)想到另有玄機(jī)。所以又來(lái)分享一篇刨根問(wèn)底的文章。
查看文件
打開(kāi) Microsoft.Cpp.Win32.user.props 一看,里面并沒(méi)有任何有用的內(nèi)容!如下圖:
看來(lái),默認(rèn)的 包含目錄 和 庫(kù)目錄 的值不是從這里來(lái)的!雖然可以在這里添加自定義的值。對(duì)比看一下 vs 工程設(shè)置中的 包含目錄 和 庫(kù)目錄 的值,如下圖:
顯然,包含目錄 和 庫(kù)目錄 的值不為空。接下來(lái)的任務(wù)是調(diào)查到這兩個(gè)值是從哪里來(lái)的(只看包含目錄的值就可以了,庫(kù)目錄的值可以用類(lèi)似的方法查)。應(yīng)該根據(jù)什么線索來(lái)調(diào)查呢?
還是搜索
包含目錄的值應(yīng)該保存在某個(gè)地方(配置文件或者注冊(cè)表),不能憑空出來(lái)這么一個(gè)東東。還是優(yōu)先在本地硬盤(pán)搜索,繼續(xù)使用 File Locator,搜索 WindowsSDK_IncludePath。
有很多條記錄。因?yàn)槲沂褂玫氖?vs2013,對(duì)應(yīng)的版本是 v120,從搜索結(jié)果中的文件路徑可以猜測(cè),ARM 是編譯 ARM 平臺(tái)程序用的,Win32 是編譯 32 位程序用的,x64 是編譯 64 位程序用的。所以,我嚴(yán)重懷疑上圖中高亮的這條記錄。修改這個(gè)文件的內(nèi)容(需要管理員權(quán)限),如下圖:
在 vs 中驗(yàn)證一下,打開(kāi)之前的工程,查看對(duì)應(yīng)的工程屬性,如下圖:
果然已經(jīng)變成了修改后的值,說(shuō)明猜對(duì)了!至此,我們已經(jīng)知道包含目錄的值是從 Toolset.props 中獲取的,是由 $(VC_IncludePath) 和 $(WindowsSDK_IncludePath) 組成的,那這兩個(gè)宏的值是從哪里來(lái)的呢?我以追查 WindowsSDK_IncludePath 的值為例展開(kāi)。
WindowsSDK_IncludePath
繼續(xù)使用 File Locator 繼續(xù)搜索,搜索結(jié)果如下圖:
看了一圈,只有 C:\Program Files (x86)\Windows Kits\8.1\DesignTime\CommonConfiguration\Neutral\Windows.props 文件比較可能是定義 WindowsSDK_IncludePath 的地方。其它幾個(gè)文件都是在使用。
修改 Windows.props 中的 WindowsSDK_IncludePath 為空(需要管理員權(quán)限),如下圖:
再次使用 vs 打開(kāi)工程文件,查看包含路徑的值,果然是我們修改后的值。
More
如果你足夠細(xì)心,會(huì)發(fā)現(xiàn)在確定 IncludePath 的值的時(shí)候,只有當(dāng) IncludePath 是空的時(shí)候,才會(huì)使用配置文件中對(duì)應(yīng)的值。我把 Toolset.props 中的關(guān)鍵語(yǔ)句粘貼如下(可以左右拖動(dòng)查看):
<IncludePath?Condition="'$(IncludePath)'?==?''">$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>Condition="'$(IncludePath)' == ''" 表示:當(dāng) $(IncludePath) 的值是空才取后面的值。如果 IncludePath 不為空,就不會(huì)取后面的值了。
IncludePath 可能會(huì)在哪里被賦值呢?我們可以自己設(shè)置 IncludePath 的值嗎?答案是肯定的。
如果有一個(gè)名為IncludePath 的環(huán)境變量,結(jié)果會(huì)是什么樣的呢?請(qǐng)看下面的視頻:
看來(lái),確實(shí)可以通過(guò)環(huán)境變量來(lái)設(shè)置 vs 中的宏。
總結(jié)
.props 文件中可以設(shè)置一些預(yù)定義的值,在 .vcxproj 文件中 import 對(duì)應(yīng)的 .props 文件即可使用。
我們可以通過(guò)環(huán)境變量的值設(shè)置 vs 中使用的宏的值。
搜索文件內(nèi)容,請(qǐng)用 File Locator。
參考資料
《Inside the Microsoft Build Engine —— Using MSBuild and Team Foundation Build》
歡迎留言交流!
感謝你的分享,點(diǎn)贊和在看
總結(jié)
以上是生活随笔為你收集整理的修复被破坏的 vs 工程设置(续)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 堪称艺术品级的应用开发框架,Abp有望超
- 下一篇: 工作十余年,还是一直被问 委托和事件 有