具有多个属性表的 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:谢谢!这就说得通了。我已将道具表添加到问题中。您能否快速浏览一下并告诉我哪些领域正在竞争(它们都很短)?在每种情况下,它只是设置了额外的库引用 嗯,显然<AdditionalIncludeDirectories>
在文件之间竞争,但我怎样才能避免这种情况呢?
未来的读者可能会发现这是一个有用的模板:github.com/chappjc/MATLAB/blob/master/propertySheets/…
【参考方案1】:
通常,属性表中的属性会覆盖先前设置的属性。要保留以前的设置,您必须显式添加它们(使用 %(
例如,在你的 opencv.props 文件中你需要替换
<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include</AdditionalIncludeDirectories>
与
<AdditionalIncludeDirectories>$(MATLAB_DIR)\extern\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
对<AdditionalLibraryDirectories>
属性应用相同的更改; <AdditionalDependencies>
已经正确。
【讨论】:
以上是关于具有多个属性表的 Visual Studio 2013 项目的主要内容,如果未能解决你的问题,请参考以下文章
为多个项目和配置有效地使用 Visual Studio 项目属性
Azure Devops Visual Studio 测试任务无法发现具有 TestCaseSource 属性的 Nunit 测试
Emmet 扩展缩写在具有属性的 Visual Studio Code 中不起作用