【发布时间】:2012-03-03 14:58:30
【问题描述】:
我的解决方案中有两个项目。我目前正在使用默认配置模式,即“调试”。当我想进行“发布”构建时,我切换到发布模式,然后我看到我以前的所有项目属性都设置为默认值,这意味着我必须再次手动将所有属性添加到此模式。
在 VS2010 中是否有一种方便的方法来解决这个问题,例如将所有属性(如包含路径、预处理器宏、构建宏等)从“调试”模式复制到“发布”模式?
【问题讨论】:
标签: c++ visual-studio-2010 build
我的解决方案中有两个项目。我目前正在使用默认配置模式,即“调试”。当我想进行“发布”构建时,我切换到发布模式,然后我看到我以前的所有项目属性都设置为默认值,这意味着我必须再次手动将所有属性添加到此模式。
在 VS2010 中是否有一种方便的方法来解决这个问题,例如将所有属性(如包含路径、预处理器宏、构建宏等)从“调试”模式复制到“发布”模式?
【问题讨论】:
标签: c++ visual-studio-2010 build
配置设置存储在.vcproj / .vcxproj 文件中。您可以在一些文本编辑器中打开它并手动复制一些设置,但这并不方便。现在您可以在窗口左上角切换Debug / Release 配置时打开项目属性并复制这些设置。
下次当您为所有配置设置相同的属性时,请选择配置:All Configurations 以避免麻烦。
【讨论】:
属性表可以轻松解决这个问题以及其他一些与属性相关的问题。
简而言之,一个项目中的所有属性都只是 XML 文档中的节点,属性组节点可以有一个condition 属性。它们很容易在任何文本编辑器中进行更改,但一个鲜为人知的功能是能够导入其他 XML 文档,它可以提供设置(除了少数项目特定的之外)。
This blog post 有一个很好的使用项目表的教程,this question 中有更多信息。您可以在 Visual Studio 中创建它们,编辑它们(包括复制现有项目设置),然后使用属性 manager(而不是属性窗口)将它们附加到您的项目中。
属性表中的组使用与常规设置相同的语法,可以为所有配置设置或过滤为仅应用于某些配置。它们也可以使用 VS 的变量和条件系统按项目名称和其他一些内容进行过滤。例如,我使用:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<Optimization>Disabled</Optimization>
<EnablePREfast>true</EnablePREfast>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
对于我的一些构建,将相同的设置应用于所有项目 (full file here)。
最方便的用途之一是在文件中提供构建目录,这样您的所有项目都会统一构建到同一个目录中(确保使用项目名称作为输出)。
【讨论】:
可以使用宏通过单个设置集合来管理跨多个不同构建(调试、发布、win32、x64 等)的几乎所有属性。
因此,在编辑项目设置之前,请确保您已将配置设置为 All Configurations 和平台:设置为 All Platforms。现在几乎所有设置都可以通过这种方式完成,涵盖所有不同的配置。比如说,您希望不同的配置和平台使用不同版本的各种库。假设您使用的命名约定在所有项目中都是一致的,那么您可以使用:
其他库目录:..\..\foo\bar\lib\$(Platform)_$(Configuration)
点击编辑按钮,然后单击Macros>> 按钮,您可以查看宏将扩展为什么。
【讨论】:
您还可以使用配置管理器重新创建您想要的新模式,然后您可以选择要从哪个配置中复制所有设置。
【讨论】: