首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Visual Studio的脚本文件中,“$OutDir”定义在哪里?

在Visual Studio的脚本文件中,“$OutDir”定义在哪里?
EN

Stack Overflow用户
提问于 2013-02-21 04:24:42
回答 3查看 10.8K关注 0票数 10

Visual Studio在项目设置中使用了一大堆宏,这些宏在here中列出。我找不到在实际脚本文件中(而不是在项目设置中)定义的这些宏或标识符的位置。

在我的例子中,我试图将项目的输出文件夹更改为解决方案调试或发布文件夹(上一级)的文件夹,但在项目设置中更改“输出目录”没有任何效果。

在.vcxproj文件中也没有提到这些宏,所以我真的不知道它们是在哪里定义的?我最感兴趣的是我想要更改到解决方案调试/发布文件夹的$(OutDir)。有人知道这些是在哪里定义的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 04:52:28

在Visual Studio2010中,主项目设置将定义一个输出文件夹,从该文件夹分配的宏为$(OutDir)。还有其他预定义的宏不能修改,但这一个可以修改。

如果我理解你想要做的事情,那么请遵循以下步骤:

  1. 打开项目的属性对话框。对话框顶部的
  2. 有两个下拉列表,一个用于“配置”,另一个用于“平台”。在配置列表中选择"All“选项。在顶部的常规设置页面上,
  3. 是一个指定为"Output
  4. ”的文件夹。将其更改为以下(引号可选) "$(SolutionDir)$(Configuration)\"。尾部的反斜杠很重要。顺便说一下,这是$(OutDir)最终选择的设置。
  5. 在左树中打开“链接器”项。然后选择“常规”设置。列表顶部右窗格中的“输出文件”选项是
  6. 。它应默认为"$(OutDir)$(TargetName)$(TargetExt)".如果不是,则将其设置为such.
  7. Rebuild

注意:如果您有多个平台目标(例如win32和x64 ),这会稍微复杂一些,但也不是那么糟糕。希望这能有所帮助。

EDIT OP还希望PDB和增量链接文件不在同一文件夹中发布,但希望在那里发布导入库。所以..。

要更改创建PDB文件的位置:

打开项目文件,再次选择" all“选项以更改所有构建配置目标(参见#2 above).

  • Select left-tree.

  • Second中的链接器/调试设置从顶部开始应该是"Generate Program Database
  1. ”设置。将其更改为"$(IntDir)$(TargetName).pdb"

增量链接文件必须(据我所知)与最终目标位于同一文件夹中。但是,如果需要,您可以禁用增量链接。这是在以下位置完成的:

打开项目文件,再次选择" all“选项以更改所有构建配置目标(参见#1 above).

  • Select project.

  • Fourth项的链接器/常规设置向下应为"Enable Incremental Linking”。将其设置为No.

  • If如果您确实禁用了增量链接,则无法使用Visual Studio的编辑并继续PDB调试格式功能,但是当您禁用增量链接时,UI太愚蠢而无法为您修复此问题,因此..在项目窗格中选择C++/General。然后,如果设置为"Program Database for Edit/Continue“,则将其切换到Program Database /Zi.

以移动构建导入库的位置。

导入库:打开项目文件,再次选择“”选项来更改所有的构建配置目标(参见#2 above).

  1. Select Linker/Advanced
  2. In右窗格将是一个大约一半的项目,导入
  3. 。将其更改为"$(OutDir)$(TargetName).lib"

不要问我如何删除导出列表文件(.exp),因为老实说我不知道。

票数 10
EN

Stack Overflow用户

发布于 2013-02-21 05:13:40

这些宏中的大多数都是在每个VS2010项目中包含的MSBuild目标文件中定义的。在您的项目文件中的某处,可能在底部附近,您会发现如下所示的行:

代码语言:javascript
运行
复制
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

如果您沿着path变量链返回,您最终会找到包含Microsoft.Cpp.targets的文件夹,该文件夹本身将包含:

代码语言:javascript
运行
复制
    <Import Project="Microsoft.Common.targets" />

在此文件中,您可以找到以下注释:

在使用此.TARGETS文件之前,必须在主项目文件中设置

多个属性。但是,如果没有设置属性,我们会选择一些默认值。

OutDir:指示项目或解决方案的最终输出位置。在构建解决方案时,

MSBuild选择的默认值是,如果$(OutDir)未显式设置,则将其默认为$(OutputPath)$(OutputPath)是在项目文件中定义的,因此在包含目标文件之前更改该属性将更改$(OutDir)的默认值。您还可以在msbuild命令行上使用/p:OutDir=bin\DebugElsewhere或其他工具为$(OutDir)指定一个值,这将覆盖MSBuild想要使用的任何默认值。(这就是TFSBuild所做的,例如,将解决方案中的所有内容都转储到同一文件夹中。)

此外,为了将来可能的参考,其余的大多数宏也在这个文件中定义,稍微往下一点:

代码语言:javascript
运行
复制
<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>
票数 3
EN

Stack Overflow用户

发布于 2014-03-31 22:56:50

让我分享一下我提出这个问题后的发现。这些宏/属性是VS2010的默认值,但您可以通过在记事本中对其进行编辑,在.vcproj文件中自行设置它们。注意:首先搜索.vcproj文件中的属性,如果它在那里,然后将它的值更改为所需的,如果不是这样定义它如下所示。我认为这是通过在.vcproj文件中添加/编辑这些定义来覆盖它们。

代码语言:javascript
运行
复制
  <PropertyGroup Label="My Values">
    <ProjectName>New_Project_Name</ProjectName>
  </PropertyGroup>

我已经定义了自己的组"My Values“来保存这些值,但是您可以在任何地方定义它们。我更喜欢在文件中尽可能高地定义它们,这样脚本的其余部分就会考虑它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14989229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档