日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

修复被破坏的 vs 工程设置(续)

發(fā)布時(shí)間:2023/12/4 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 修复被破坏的 vs 工程设置(续) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

緣起

在上一篇文章——《修復(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。