VS的项目属性表实际上是由一系列的XML文件定义的,都存放在C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\2052文件夹下。我们全然能够仿照它们的定义加入自己的属性页。

首先在项目文件里导入自己定义的目标:

<Import Condition="$(Platform)=='hi3516'" Project=" EmbedLinux.targets" />

这里的EmbedLinux.targets是自己创建的文件,在这个目标文件里加上对xml文件的引用:

<ItemGroupCondition="'$(UseDefaultPropertyPageSchemas)'
!= 'false'">

<PropertyPageSchemaCondition="'$(ConfigurationType)'
!= 'Utility'" Include="2052\gnu.xml"
/>

</ItemGroup>

我们的配置定义所有存放在gnu.xml文件里。

<?xmlversion="1.0"
encoding="utf-8"?>

<!--Copyright, Microsoft Corporation, All rights reserved.-->

<RuleName="Gnu"
PageTemplate="tool"
DisplayName="GNU配置"
SwitchPrefix="/"
"
xmlns="http://schemas.microsoft.com/build/2009/properties"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">

<Rule.Categories>

<CategoryName="General"
DisplayName="项目"/>

</Rule.Categories>

<Rule.DataSource>

<DataSourcePersistence="ProjectFile"
Label="Configuration"
HasConfigurationCondition="true"/>

</Rule.DataSource>

<EnumPropertyName="GnuProjectType"
DisplayName="GNU项目类型"
Description="选择GNU项目所属的类型"
Category="General">

<EnumValueName="UBoot"
DisplayName="uboot"
Description="用以生成UBOOT项目。

">

</EnumValue>

<EnumValueName="LinuxKernel"
DisplayName="Linux内核"
Description="这是一个Linux内核项目。">

</EnumValue>

<EnumValueName="LinuxMakeApp"
DisplayName="Linux应用(Makefile)"
Description="这是一个使用Makefile开发的Linux应用程序。

">

</EnumValue>

</EnumProperty>

<StringPropertySubtype="folder"
Name="SourceRoot"
DisplayName="源代码根文件夹"
Description="使用相对路径表达的源代码根文件夹。"
Category="General">

</StringProperty>

</Rule>

关闭VS再打开项目属性:

这里多了一个GNU配置项,在这个GNU配置中,我们能够依据自己的项目需求加入选项,VS将把这些选项保存到vcxproj项目文件里。

在MSBUILD进行编译的时候。这些參数能够传递给我们自己定义的编译任务。

须要注意的是。在这个xml文件里:

<DataSourcePersistence="ProjectFile"
Label="Configuration"
HasConfigurationCondition="true"/>

这里的Label仅仅能填写固定的值,如Configuration, ClCompile, Link等,假设是其他未在props文件里定义的属性值则配置无法正确显示。

在保存后能够发现vcxproj文件里多了这种几行:

<GnuProjectType>LinuxKernel</GnuProjectType>

<SourceRoot>.</SourceRoot>

也就是说我们的配置已经正确保存下来了。

Vs2012在Linux开发中的应用(5):项目属性的定义的更多相关文章

  1. Vs2012在Linux开发中的应用(1):开发环境

    在Linux的开发过程中使用过多个IDE.code::blocks.eclipse.source insight.还有嵌入式厂商提供的各种IDE.如VisualDsp等,感觉总是不如vs强大好用.尽管 ...

  2. Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程

    MSBUILD的编译过程实际上是依据一系列的targets文件定义的.当我们在IDE运行生成.批生成.清理命令的时候.VS会查找这些命令相应的Task并运行它,以下我们逐个分析这个过程. 当运行生成操 ...

  3. ios开发中button控件的属性及常见问题

    最为最基本的控件,我们必须对button的每个常用属性都熟练应用: 1,使用之前,必须对按钮进行定义,为乐规范,在@interface ViewController (){}中进行定义,先定义后使用. ...

  4. Vs2013在Linux开发中的应用(19): 启动gdb

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 1.1    载入调试引擎 因为我们无法干预VC的调试引擎载入.但能够侦听VC的调试引擎载入事件, ...

  5. 4、linux开发中常用指令

    1.cat /proc/device 可以查看各个全部字符设备和块设备,在register_chrdev中设置的名字在打印出来的信息中可以看到:2.top 可以看各个应用程序占用CPU量及PID等信息 ...

  6. linux开发中常用的命令及技巧(连载)

    1.在内核或uboot目录下搜索相关内容/文件名时:grep "USB" * -nR find -name "*USB*" 2.查看系统中设备 cat  /pr ...

  7. Android开发中XML布局的常用属性说明

    <!-- 常用属性说明: android:id="@+id/button" 为控件指定Id android:text="NNNNNNNNNN" 指定控件的 ...

  8. linux内核中ip,tcp等头的定义(转)

    一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress[6];    //目的m ...

  9. Vs2012在Linux应用程序开发(3):加入新平台hi3516

    下面我们将VS2012添加一个新的平台支持,由于近来与哈斯hi3516.就选它吧! 1.1     复制平台文件 原来一直认为要让VS支持一个新的平台须要编写代码,某天在看MSBUILD文件夹的时候突 ...

随机推荐

  1. js中数组删除 splice和delete的区别,以及delete的使用

    var test=[];test[1]={name:'1',age:1};test[2]={name:'2',age:2};test[4]={name:'3',age:3}; console.log( ...

  2. 安卓adb在拨号键盘上输入井号(#)

    安卓系统下由于#号是属于内定字符,需要转义为%23第一种方式:adb shell service call phone 1 s16 "%23"第二种方式:adb shell am ...

  3. jquery实现密码强度检测

    jquery实现密码强度验证   jquery实现密码强度验证 JS代码:   $('#pass').keyup(function(e) { var strongRegex = new RegExp( ...

  4. CreateProcess相关

    CreateProcess不创建窗口执行: https://blog.csdn.net/rongwenbin/article/details/24422041 CreateProcess返回值: 执行 ...

  5. 计算机网络之TCP拥塞控制

    1. 首先,拥塞控制和流量控制是不一样的. 拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程.  流量控制是点对点通信量的控制,是一个端到端的问题,主要就是 ...

  6. 如何使用MySQL一个表中的字段更新另一个表中字段

    [本文出自:https://www.jb51.net/article/150323.htm] 这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下 1,修改1列 ...

  7. 第四讲:debugging simulation mismatches

    关于竞争冒险: 1.use +race utility to locate race condition code **** 2.use $vcdplusdeltacycleon to locate ...

  8. docker:安装

    文章来源:http://www.cnblogs.com/hello-tl/p/8901132.html 0.卸载旧版本 # yum remove docker \ docker-client \ do ...

  9. 关于Python中包裹传参和解包裹的理解

    1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹位置传参和包裹关键字传参.先看包裹位置传参: 在这 ...

  10. Python装饰器粗解学习

    此次学习资料详细来自:http://blog.csdn.net/u013471155 本次是粗学,仍有诸多疑问,暂且记录一二,如有不足和建议,希望可以达者指点. 三个关键点理解:   1.关于函数“变 ...