Visual Studio 2010 C++ 属性设置基础
在 《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++ 属性设置基础的更多相关文章
- Visual Studio 2010 C++ 工程文件解读
在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义: 根据 ...
- 更改Visual Studio 2010/2012/2008的主题设置
一.更改主题: 主题网站:http://studiostyl.es/ Visual Studio 2010发布也已经有一段时间了,不过安装后默认的白底的主题长时间看代码可能会感觉眼睛酸痛,况且时间长了 ...
- 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)
Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...
- Visual Studio 2010 单元测试之一---普通单元测试
原文:Visual Studio 2010 单元测试之一---普通单元测试 本文以Visual Studio 2010为例,来介绍如何在Visual Studio里面进行单元测试. 首先来介绍普通单元 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- [入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一)
[入门级] visual studio 2010 mvc4开发,用ibatis作为数据库访问媒介(一) Date 周二 06 一月 2015 By 钟谢伟 Tags mvc4 / asp.net 示 ...
- WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)
以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 系统:WIN7,64位 开发平台:Visual Studio 2010 显卡:NVIDIA ...
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET
Visual Studio 2010(.NET 4.0)中使用SQLite.NET 2011年4月1日 | 分类: DataBase, DOTNET | 标签: .net 4.0, SQLite. ...
- Win7 32bit + Matlab2013b +Visual Studio 2010联合编程配置
要建立独立运行的C应用程序,系统中需要安装Matlab.Matlab编译器.C/C++编译器以及Matlab C/C++数学库函数和图形库函数. Matlab编译器使用mbuild命令可以直接将C/C ...
随机推荐
- git远程库与本地联系报错:fatal: Not a git repository (or any of the parent directories): .git
在github上新建了一个仓库,然后相与本地的仓库联系起来 $ git remote add origin https://github.com/lizhong24/mysite2.git fatal ...
- URL地址中的字符串转换
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,怎么解决?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- HTTP协议 (七) Cookie(转)
add by zhj: 客户端通过request header:cookie将cookie发给服务端,而服务端通过response header: set-cookie将cookie传回客户端 一条c ...
- CentOS6.5之Zabbix3.2.2 Server安装、汉化及Agent安装
1.安装MySQL 1.1.安装MySQL rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum ...
- 通过进程名称删除进程 ps -ef
删除进程名为udpserver的进程. kill -9 $(ps -ef|grep udpserver | grep java|awk '{print $2}' ). 1.通过进程名取得进程号: ps ...
- 面试题5:JS实现从尾到头打印单链表
单链表,在内存中所占地址是不连续的.所以遍历单链表时:需要从头遍历.而题目要求输出的顺序:从尾到头.也就是说第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出.这就是典型的“后进先出”, ...
- 如何使用别人的代码 (特指在MFC里面 或者推广为C++里面)
别人写了一堆代码,给了你源代码.在C++里面 应该是 头文件(.h)和源文件(.cpp). 那么我们如何使用他们呢?? 第一步:将其包含进来 如下图 ,不论是头文件还是源文件都如此 第二步:告诉 ...
- tcp五层模型
物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字 ...
- XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相)
XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相) 2014-08-15 22:04 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的内容.傻瓜式的表 ...
- Django框架_URLconf、Views、template、ORM
目录: 一.Django-MTV MTV模型 Django基本命令 视图层之路由配置系统(views) 视图层之视图函数(views) 模板层(template) 二.Django-model基础 O ...