【问题标题】:Shared property sheet (Debug and Release) for a C++ visual studio solutionC++ Visual Studio 解决方案的共享属性表(调试和发布)
【发布时间】:2018-10-13 22:46:09
【问题描述】:

我有一个 C++ Visual Studio 2017 解决方案,其中添加了 50 个项目到解决方案文件中。 我有很少的外部库路径分别用于调试和发布构建。

例子:

    Debug paths:
     ./../External/adobe/debug
     ./../External/ms/debug

    Release paths:
     ./../External/adobe/release
     ./../External/ms/release

我不想将这些路径添加到每个单独的项目中。有没有办法在解决方案级别为调试和发布配置添加这些路径。

我通过属性管理器尝试了属性表,但如果我在.props 文件中添加路径,则它在两种配置中都可用。我想在配置中分别有调试和发布路径。

【问题讨论】:

  • 如何快速做到这一点并不那么直观,this answer 展示了如何使用 Shift+Click。

标签: c++ visual-studio visual-studio-2010


【解决方案1】:

我在解决方案级别添加用户 marcos 时遇到了类似问题。

  1. 您可以像 SoronelHaetir 的回答一样一次选择所有项目,将自定义属性表文件添加到 Property Manager 窗口中的每个项目配置节点中,但它会将自定义属性表文件路径添加到项目文件 (.vcxproj),在某些情况下,这可能不是您所期望的。

    以这种方式覆盖属性和目标相当于将以下导入添加到解决方案中的所有.vcxproj文件

    <Import Project=="..\my_custom_property_sheet.props" />
    

    另见Share or reuse Visual Studio project settings - To create a property sheet

  2. 如果您只想从 MSBuild 命令提示符覆盖项目属性和目标而不更改项目文件。你可以参考 How to: Modify C++ project properties and targets without changing the project file

    msbuild myproject.sln /p:ForceImportBeforeCppTargets="C:\sources\my_props.props"
    msbuild myproject.sln /p:ForceImportAfterCppTargets="C:\sources\my_target.targets"
    
  3. 尽管有以下文档,但我们似乎无法在 Property Manager 窗口的解决方案级别节点中添加自定义 Property Sheet

    在包含许多项目的大型解决方案中,在解决方案级别创建属性表会很有用。将项目添加到解决方案时,使用 Property Manager 将该属性表添加到项目中。如果项目级别需要,您可以添加新的属性表来设置项目特定的值。

    实际上,我找到了另一个参考:Customize your build - Directory.Build.props and Directory.Build.targets。可能对不想污染现有项目.vcxproj 文件的人有意义。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ImportGroup Label="PropertySheets" />
      <PropertyGroup Label="UserMacros">
        <BOOST_VERSION>boost_1_78_0</BOOST_VERSION>
      </PropertyGroup>
      <PropertyGroup />
      <ItemDefinitionGroup />
      <ItemGroup>
        <BuildMacro Include="BOOST_VERSION">
          <Value>$(BOOST_VERSION)</Value>
        </BuildMacro>
      </ItemGroup>
    </Project>
    

最后,要分别添加一些用于调试和发布构建的外部库路径,可以参考.vcxproj and .props file structure - Per-configuration PropertyGroup elements

此属性组有多个实例,每个配置一个用于所有项目配置。每个属性组必须附加一个配置条件。

例如,

<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations"/>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
</Project>

另见

【讨论】:

    【解决方案2】:

    更简单的方法是在解决方案资源管理器中选择多个项目,然后打开属性窗口,然后您将一次编辑所有选定的项目。

    如果您创建一个属性表文件,则无论如何都必须将其添加到属性管理器下的每个受影响的项目配置中,这很可能需要更长的时间(尤其是当我知道解决方案时,我不确定项目经理是否能够执行多项选择探险家可以)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 2017-10-04
      • 2015-11-28
      相关资源
      最近更新 更多