具有多个属性表的 Visual Studio 2013 项目

Posted

技术标签:

【中文标题】具有多个属性表的 Visual Studio 2013 项目【英文标题】:Visual Studio 2013 Project with Multiple Property Sheets 【发布时间】:2016-01-19 00:06:37 【问题描述】:

我正在使用 Windows 10 上的 Visual Studio 2013 开发一个项目。基本上我正在使用 C++ 编写一些 MEX 文件,并且我正在使用一些我经常使用的库:OpenCV 和 MATLAB 的外部库。对于每个库,我都保存了包含所有必要信息的属性表(.props 文件)。它的要点是我正在尝试将我的 opencv.props 文件和我的 matlab.props 文件添加到项目中。

当我尝试将多个属性表添加到“属性管理器”中的属性配置时,出现了我当前的问题。对于每个,我单击“添加现有属性表”,瞧!我应该得到正确的设置。当我只使用一个属性表时,一切正常。当我尝试添加多张工作表时,似乎只有最近添加的内容正在注册。

知道我哪里出错了吗?

我已将 .props 文件的内容粘贴在下面,因为它们都非常简短:

matlab.props

<?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" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include</AdditionalIncludeDirectories>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

opencv.props

<?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" />
  <PropertyGroup>
    <_PropertySheetDisplayName>OpenCV_debug</_PropertySheetDisplayName>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>$(OPENCV_DIR)\..\..\include</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>$(OPENCV_DIR)\lib</AdditionalLibraryDirectories>
      <AdditionalDependencies>opencv_calib3d$(OPENCV_VERSION)d.lib;opencv_contrib$(OPENCV_VERSION)d.lib;opencv_core$(OPENCV_VERSION)d.lib;opencv_features2d$(OPENCV_VERSION)d.lib;opencv_flann$(OPENCV_VERSION)d.lib;opencv_gpu$(OPENCV_VERSION)d.lib;opencv_highgui$(OPENCV_VERSION)d.lib;opencv_imgproc$(OPENCV_VERSION)d.lib;opencv_legacy$(OPENCV_VERSION)d.lib;opencv_ml$(OPENCV_VERSION)d.lib;opencv_nonfree$(OPENCV_VERSION)d.lib;opencv_objdetect$(OPENCV_VERSION)d.lib;opencv_ocl$(OPENCV_VERSION)d.lib;opencv_photo$(OPENCV_VERSION)d.lib;opencv_stitching$(OPENCV_VERSION)d.lib;opencv_superres$(OPENCV_VERSION)d.lib;opencv_ts$(OPENCV_VERSION)d.lib;opencv_video$(OPENCV_VERSION)d.lib;opencv_videostab$(OPENCV_VERSION)d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

【问题讨论】:

您的属性表具有相同设置的竞争条目。可以在每个属性表中设置某些属性(例如附加库引用),而其他属性(例如字符集)则不能。仅指定特定于各个库的属性。 @IInspectable:谢谢!这就说得通了。我已将道具表添加到问题中。您能否快速浏览一下并告诉我哪些领域正在竞争(它们都很短)?在每种情况下,它只是设置了额外的库引用 嗯,显然&lt;AdditionalIncludeDirectories&gt; 在文件之间竞争,但我怎样才能避免这种情况呢? 未来的读者可能会发现这是一个有用的模板:github.com/chappjc/MATLAB/blob/master/propertySheets/… 【参考方案1】:

通常,属性表中的属性会覆盖先前设置的属性。要保留以前的设置,您必须显式添加它们(使用 %() 宏语法)。

例如,在你的 opencv.props 文件中你需要替换

<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include</AdditionalIncludeDirectories>

<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

&lt;AdditionalLibraryDirectories&gt; 属性应用相同的更改; &lt;AdditionalDependencies&gt; 已经正确。

【讨论】:

以上是关于具有多个属性表的 Visual Studio 2013 项目的主要内容,如果未能解决你的问题,请参考以下文章