Visual Studio 2010 C++ 属性设置基础

摘要:
在Visual Studio 2010 C++项目文件解释中,提到可以在C++项目中执行用户定义的属性设置。如何做到这一点=“要判断,您还可以在值上“˃”、“˃=”、“˂”、“˂=”,在目录上“Exists”和“HasTrailingFlash”,以及“!“在表达式上

在 《Visual Studio 2010 C++ 工程文件解读》中提到了C++工程中可以进行用户自定义的属性设置,如何进行属性设置呢?

下面我们来了解一下 props 文件的基本规则:

1、在 PropertyGroup 元素中放置子元素就是定义属性,属性的值就是子元素的内容;例如

<PropertyGroup>
<OutputDriver>D:\</OutputDriver>
</PropertyGroup>

定义来一个属性 OutputDriver 值为 D:\

2、定义元素时可以通过条件来让属性定义在特定的条件下起作用,例如:

<PropertyGroup>
<SingleFolder Condition="'$(SingleFolder)' == ''">false</SingleFolder>
</PropertyGroup>

只有当 SingleFolder 属性没有定义或者定义的值为空时,将 SingleFolder 的属性定义为 false ; 如果属性组中只有一个属性,或者一个属性组中的多个属性有相同的条件,则可以把条件放置到 PropertyGroup 元素中;

3、条件表达式可以使用 "=="、"!=" 进行判断,也可以对数值进行“>”、“>=”、“<”、“<=”判断,并且可以对目录进行“Exists”和“HasTrailingSlash”判断,同时可以对表达式进行 “!” 或对多个表达式进行 “AND”、“OR”等操作,可以参考 http://msdn.microsoft.com/en-us/library/7szfhaft.aspx  

4、值的定义可以进行继承,其实就是在原有的值的基础上增加新的值,如下所示:

<PropertyGroup Condition="Exists('$(ImportFolder)')">
<LibraryPath>$(ImportFolder);$(LibraryPath)</LibraryPath>
</PropertyGroup>

如果属性“ImportFolder”指定的目录存在,那么将该目录增加到“库”的搜索路径中,并且优先级在默认搜索路径的前面;

5、可以使用 .net 的函数进行判断或者属性值的定义,例如定义解决方案文件所在的驱动器可以使用如下的定义:

<PropertyGroup Condition="'$(SolutionDriver)' == ''" >
<SolutionDriver>$([System.IO.Path]::GetPathRoot($(SolutionDir)))</SolutionDriver>
</PropertyGroup>

6、可以使用 import 元素导入其他的属性设置文件,例如需要导入一个解决方案同名的属性文件:

<ImportGroup>
<Import Project="$(UserRootDir)\Microsoft.Cpp.Common.user.props" />
</ImportGroup>

说明:UserRootDir 是 C++ 默认属性文件中定义的属性,值为 $(LOCALAPPDATA)\Microsoft\MSBuild\v4.0\

7、如果导入的属性文件需要在 Visual Studio 2010 的 "属性管理器" (Property Manager)窗口中可以看到,那么在 ImportGroup 元素中增加特定的属性即可,如下所示:

<ImportGroup Label="PropertySheets">
<Import Project="$(ProjectPath).props" Condition="Exists('$(ProjectPath).props')" />
</ImportGroup>

则如果一个工程文件的目录下存在 .vcxproj.props 将导入该文件,例如工程文件为 MyProj.vcxproj 并且在工程目录下存在 MyProj.vcxproj.props文件则会自动导入文件 MyProj.vcxproj.props 属性文件

8、如果在 Property Manager 窗口中希望看到的属性文件名称不是文件名,而是自定的名称,那么可以再属性文件中增加一个特定的属性定义来实现,例如:

<PropertyGroup>
<_PropertySheetDisplayName>Cpp Common Properties</_PropertySheetDisplayName>
</PropertyGroup>

好了,基本规则我们已经掌握了(复杂的可以研究 VS2010 的 props 文件和查看 MSDN),下面来看看编译和链接的选项如何设置:

1、编译的选项放置在 ItemDefinitionGroup 元素的 ClCompile 子元素中,例如下面的定义:

<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>ISF_BUILD_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>ISF/Stable_Headers.h</PrecompiledHeaderFile>
<PrecompiledHeader>Use</PrecompiledHeader>
</ClCompile>
</ItemDefinitionGroup>

在这个定义中,首先增加来一个宏定义“ISF_BUILD_DLL”,然后是定义预编译头文件的名称“ISF/Stable_Headers.h”,而不是默认的“stdafx.h”,最后定义来预编译头文件的使用规则是“使用预编译头文件”,这就要求所有的C/C++文件必须在最前面包含头文件 “ISF/Stable_Headers.h”,除非在文件上指定不使用预编译头文件;

2、链接的选项放置在 ItemDefinitionGroup 元素的 Link 子元素中,例如下面的定义:

<ItemDefinitionGroup>
<Link>
<ProgramDatabaseFile>$(SymbolFolder)$(OutputName).pdb</ProgramDatabaseFile>
<ImportLibrary>$(ImportFolder)$(OutputName).lib</ImportLibrary>
</Link>
</ItemDefinitionGroup>

在这个定义中,指定了输出的私有的 pdb 文件的输出全路径和动态库的导入库的输出全路径;

3、库的选项放置在 ItemDefinitionGroup 元素的 Lib 子元素中,例如下面的定义:

<ItemDefinitionGroup>
<Lib>
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
</Lib>
</ItemDefinitionGroup>

定义了静态库生成时的代码生成行为是“连接时代码生成”;

嗯,到了该结束的时候了,更多的选项还是留待读者自己研究发现吧....

免责声明:文章转载自《Visual Studio 2010 C++ 属性设置基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇修改策略组/注册表 屏蔽Win10升级解决方法Android开源动画库nineoldandroids下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第九章Admin后台系统

第九章 Admin后台系统 默认启用的Admin后台系统'django.contrib.admin', 创建账户密码之前,确保项目已执行数据迁移,在数据库中创建相应的数据表 中文显示后台 把该中间件位于settings.py中的第三个中间件的位置'django.middleware.locale.LocaleMiddleware', 注册模型到后台的两种方...

C#使用FFmpeg的总结

上篇文章提到FFmpeg解决项目中视频和语音问题,说道C#和FFmpeg不得不提的2个类库。 1、Xabe.FFmpeg 简单查看了下源码和demo,发现基于ffmpeg.exe的命令行参数进行处理。 2、FFmpeg.AutoGen 把C语言对外API和类型翻译成C#的API和对象。 看了一下这个源码生成,其中使用了CppSharp来生成g.cs的文件,...

std(标准库)和STL(标准模板库)的关系

C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串 C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化; 下面分类详解: C1 标准库中与语言支持功能相关的头文件 头文件 描述 定义宏NULL和offsetof,以及其他标准类型size_t和ptrdiff_t。与对应的标准C头...

常用DOS命令之通俗易懂篇

目录 常用DOS命令之通俗易懂篇 Arp 命令 Assoc 关联 At 计划服务 Attrib 属性 Cd=chdir 目录 Cipher Cls 清屏 Color 颜色 Comp 比较 Compact 压缩 Copy 复制 Date 日期 Defrag 磁盘碎片 Del 删除文件 Dir 目录 Edit 编辑 Exit 退出 Expand 扩展...

Ant命令总结

1 Ant是什么? Apache Ant 是一个基于 Java的生成工具。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本2 下载、安装Ant 安装Ant下载.zip...

C++中清空缓冲区

C++中标准输入cin有多种输入方式。。 这篇文章罗列的还是简要易懂的。C++输入cin详解。。。如果只是简单的使用cin>>的话,会单个token的读入。但是会忽略换行符,空格,制表符等空白符。其中cin.getline()和cin.get()都会遇到一个非常棘手的事情,就是当输入的字符串,或者说缓冲区中的字符多于第二个参数int的要求时。缓...