在Visual Studio中,如何在不编辑vcxproj文件的情况下覆盖未继承的项目属性值

时间:2016-03-28 19:12:44

标签: visual-c++ visual-studio-2013 msbuild

在Visual Studio 2013 / VC ++中,对于静态链接的可执行文件,如何使用属性表以粗体(不是继承)覆盖属性设置?我无法编辑vcxproj文件,因为它是自动生成的,并且在生成时会丢失直接编辑。

详细说明:

我有一个包含两个项目的Visual Studio解决方案:

  1. Dependency.vcxproj - >生成Dependency.lib,这是一个静态库。
  2. MyProg.vcxproj - >链接到Dependency.lib并生成MyProg.exe
  3. 其中,Dependency.vcxproj是自动生成的,我无法控制它的生成(每次运行时它都是从构建脚本生成的)。我看到它已将优化设置为 O2 ,并且还将调试信息格式设置为。 (这两个都是粗体 - 所以我认为它们已被明确关闭)。但是,为了允许调试,我想覆盖这些属性并将优化 已禁用调试信息格式设置为 / Zi 当我将其构建为我的解决方案的一部分时。

    我尝试使用项目的.props文件覆盖它,但是没有覆盖这些值 - 我读到某个属性需要为要覆盖的道具表继承属性。

    有没有办法覆盖这样一个已经修改过的属性而不编辑vcxproj文件本身?

1 个答案:

答案 0 :(得分:1)

您需要确保lib项目实际上正在使用.props文件。意味着,它必须包含在项目中。如果要使用.props覆盖已定义的属性,则在将属性设置为覆盖它之后,需要包含此.props。基本上.props的工作类似于文本包含。

另一种选择可能是使用.user文件覆盖属性(.user可能已经包含在生成的.vcxproj中,条件为#34;如果存在")。但无论如何,您需要找到一种方法来将您的文件重新定义为.vcxproj文件中的链接器属性。

通常,您使用" debug" vs"发布"配置允许/禁止调试。也许你只需要选择" debug"您的解决方案的配置(这个可以在工具栏中找到,Visual Studio中的组合框)然后构建?

如果不是这种情况,我会说最简单的方法可能是修改用于生成项目的脚本以生成所需的项目。