![](/img/trans.png)
[英]Where are NDEBUG and _DEBUG Defined in Visual Studio 2015?
[英]Where is '$OutDir' defined in the script file in Visual Studio?
Visual Studio在項目設置中使用了大量宏,這些宏列在此處 。 我無法找到實際腳本文件中定義的這些宏或標識符的位置(不在項目設置中)。
在我的情況下,我試圖將項目的輸出文件夾更改為解決方案調試或發布文件夾(一級),但在項目設置中更改“輸出目錄”無效。
在.vcxproj文件中沒有提到這些宏,所以我真的不知道他們在哪里定義? 我最感興趣的是我想要更改為解決方案調試/發布文件夾的$(OutDir)
。 有誰知道這些定義在哪里?
在Visual Studio 2010中,主項目設置將定義輸出文件夾,從此文件夾分配設置的宏是$(OutDir)。 還有其他預定義的宏無法修改,但您可以使用此宏。
如果我了解您要執行的操作,請按以下步驟操作:
注意:如果您有多個平台目標(例如win32和x64),這會涉及更多,但不是那么糟糕。 希望這可以幫助。
編輯 OP也希望PDB和增量鏈接文件不能在同一文件夾中公布,但不希望公布有導入庫。 所以.....
要更改創建PDB文件的位置:
增量鏈接文件必須 (據我所知)與最終目標位於同一文件夾中。 但是,如果需要,可以禁用增量鏈接。 這是在以下位置完成的:
移動構建導入庫的位置。
不要問我如何擺脫導出列表文件(.exp)因為老實說我不知道。
這些宏中的大多數是在每個VS2010項目中包含的MSBuild目標文件中定義的。 在項目文件的某個地方,可能在底部附近,你會發現這樣的一行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
如果你追溯路徑變量鏈,你最終會找到包含Microsoft.Cpp.targets
的文件夾,它本身將包含:
<Import Project="Microsoft.Common.targets" />
在此文件中,您將找到以下注釋:
在使用此.TARGETS文件之前,必須在主項目文件中設置多個屬性。 但是,如果未設置屬性,我們會選擇一些默認值。
OutDir:表示項目或解決方案的最終輸出位置。 在構建解決方案時,
如果沒有明確設置,MSBuild選擇的默認值是默認$(OutDir)
到$(OutputPath)
。 $(OutputPath)
在您的項目文件中定義的,所以改變這種屬性,都會包含目標文件之前將更改的默認值$(OutDir)
您也可以使用/p:OutDir=bin\\DebugElsewhere
或其他任何內容在msbuild
命令行上為$(OutDir)
指定一個值,它將覆蓋MSBuild想要使用的任何默認值。 (這就是TFSBuild所做的,例如,將解決方案中的所有內容轉儲到同一文件夾中。)
此外,為了將來可能的參考,大多數剩余的宏也在此文件中定義,稍微向下:
<PropertyGroup>
<TargetDir Condition="'$(OutDir)' != ''">$([MSBuild]::Escape($([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(OutDir)`))`))))</TargetDir>
<TargetPath Condition=" '$(TargetPath)' == '' ">$(TargetDir)$(TargetFileName)</TargetPath>
<ProjectDir Condition=" '$(ProjectDir)' == '' ">$(MSBuildProjectDirectory)\</ProjectDir>
<ProjectPath Condition=" '$(ProjectPath)' == '' ">$(ProjectDir)$(ProjectFileName)</ProjectPath>
.
.
.
</PropertyGroup>
讓我分享自從提出這個問題以來我發現的內容。 這些宏/屬性是VS2010默認值,但您可以在.vcproj文件中通過在記事本中進行編輯來自行設置它們。 注意:首先搜索.vcproj文件中的屬性,如果它在那里,則將其值更改為所需的值,如果沒有像下面那樣定義它。 我認為它通過在.vcproj文件中添加/編輯它們來覆蓋這些定義。
<PropertyGroup Label="My Values">
<ProjectName>New_Project_Name</ProjectName>
</PropertyGroup>
我已經定義了自己的“我的值”組以保留這些值,但您可以在任何地方定義它們。 我更喜歡在文件中將它們定義為盡可能高,因此腳本的其余部分將它們考慮在內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.