VS中为什么不同的项目类型属性查看和设置的界面不一样
在VS中,存在ATL、MFC、Win32、CLR、常规等等各种工程模板,这些工程模板对应于开发不同类型的应用,比如要开发com,你应该选ATL;开发最原始的通过API代用操作系统的应用,应该用Win32;开发MFC图形界面程序,应该用MFC等等,详细的可以去查资料,比如参考:ATL CLR MFC Win32 常规 的区别。
但是我们今天的重点不是这些选项代表什么意思,而是要选择不同模板建立工程之后,当你通过工程的属性面板去配置一些环境如外部保护路径、外部库等等时,不同类型的工程,他的“属性”面板是不一样的。比如你新建工程时选择的是<常规>里的<生成文件目录>的话,你是看不到如图一所示的熟悉的“VC++属性”、“链接器”等等熟悉的界面的,取而代之的是如图二这样的让你不知所以的界面。

图一 通常所见的工程的“属性”面板

图二 选择<常规>里的<生成文件目录>所生成项目的“属性”
何故?别急,这就要设计到一个很重要的文件了,VC的项目工程中,很重要的一个配置文件是一.vcxproj为扩展名的xml配置文件,文件的名字就是工程的名字。你所配置的“属性”就是记录在这个配置文件中的,当然,这个配置文件也包含了你看到的“属性”面板本身长什么样子。其中有一个很重要的配置为ConfigurationType,这就规定了你的是什么类型的项目。请看下面:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
一般来说,我们都是要建立应用程序工程,所以我们看到的就是如图一所示的那种很熟悉的“属性”面板。要出现这样的面板,就需要在.vcxproj文件中配置如上面第2行和第7行的ConfiguratioinType为 Application。为什么要两个位置呢?因为这是对应于不同的编译方案,一个工程可以有多个编译方案,常见的就是Debug和Release,然后又分为Win32和x64(就是分别代表32位和64位,当然也有用x86和x64来代替的)。如果你生成项目时选择的是选择<常规>里的<生成文件目录>所生成项目的“属性”,那么.vcxproj配置文件里的Configuration就不是Application,而是Makefile,你就看到了如图二这样的“属性”面板了。
我们的图一和图二其实是同一个工程,然后我们通过手动更改.vcxproj文件的Configuration,实现了图一到图二的转化。至于为什么会存在这类非Application的工程呢?仔细看图二,有个NMake。这是什么呢?且继续往下看。
我们知道,很多开源库都是在Linux下面写的,因此不可能有VC的编译工程,而是Linux和Unix环境下常用的Makefile工程,而此时要在windows环境下编译,为了方便这类用户的需求,微软搞了一个叫nmake的东西,然后通过写一个类似于Makefile的文件(通常是makefile.vc),再加上一个nmake.opt的配置文件,实现对非VC工程的编译。这类工程照理说只能用命令行操作,但是微软的习惯就是能用鼠标就坚决不用键盘,并且认为用户都不懂命令行的,所以必须在VS这样的IDE中也搞出能够点一下鼠标就能实现Build、Clean这样的操作,所以有了Configuration是MakeFile这样的VC工程类型,让你继续只用鼠标不用键盘地工作。(其实也不是,比如你的makefile.vc就必须自己写,然而,除非你是大神,不然你用到的makefile.vc的时候都是为了用别人写好的库,此时makefile.vc都是别人帮你写好了的)。
VS中为什么不同的项目类型属性查看和设置的界面不一样的更多相关文章
- eclipse中怎么调出左边项目列表,解决方法:主界面的最上面一栏的Window--ShowView--Project Explorer
主界面的最上面一栏的Window--ShowView--Project Explorer
- Spring_day01--注入对象类型属性(重点)_P名称空间注入_注入复杂类型属性_IOC和DI区别_Spring整合web项目原理
注入对象类型属性(重点) Action要new一个service对象,Service中又要new一个Dao对象,现在把new的过程交给spring来操作 1 创建service类和dao类 (1)在s ...
- vue项目中使用bpmn-流程图json属性转xml(七篇更新完成)
内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项,具 ...
- swfit 中的类型属性说明
swift 中不叫做类属性,叫类型属性,因为在swift中,struct 和enum也是可以有这种属性的,叫类属性明显不准. 有以下注意事项: 对于值类型(指结构体和枚举)可以定义存储型和计算型类型属 ...
- C# winform项目中ListView控件使用CheckBoxes属性实现单选功能
C# winform项目中ListView控件使用CheckBoxes属性实现单选功能 在做项目时需要使用ListView控件的CheckBoxes属性显示,还要在点击行时自动选中CheckBoxes ...
- PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结
前 言 OOP 学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1 PHP中的抽象 ...
- Swift中的类型属性(静态变量)
http://blog.haohtml.com/archives/15098 Swift中的类型属性(静态变量) Posted on 2014/06/13 类型属性语法 在 C 或 Objective ...
- pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等
pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...
- AutoMapper在MVC中的运用06-一次性定义映射、复杂类型属性映射
本篇AutoMapper使用场景: ※ 当源和目标具有同名的复杂类型属性.集合类型属性,这2种属性对应的类间也需建立映射 ※ 一次性定义好源和目标的所有映射 ※ 一次性定义好源和目标的所有映射,目标中 ...
随机推荐
- android studio中使用recyclerview小白篇(二)
前面一个说了怎么把这个包引用进来,这一节说怎么做一个简单的例子出来,我也是照着别人的例子写的,然后慢慢改就行了,做好的效果如下图 1.在我们的activity_main中把recyclerview填加 ...
- 可变大小、颜色边框、样式的UISwitch
1.CHSwitch.h // // 文 件 名:CHSwitch.h // // 版权所有:Copyright © 2018 lelight. All rights reserved. // 创 建 ...
- Ubuntu 安装后的配置及美化(二)
Ubuntu安装后的配置与美化(二) 上篇文章讲了安装ubuntu后的一系列基础的配置,已经可以满足日常的使用了,这篇文章讲一下安装 IDE 及一些其他的配置. 1.安装 SSR 下载 SSR 客户端 ...
- P4313 文理分科 最小割
$ \color{#0066ff}{ 题目描述 }$ 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科.他的班级可以用一个n*m的矩阵进行描述,每个格 ...
- [JSOI2007]麻将 模拟 BZOJ1028
题目描述 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张. 在麻将中,通常 ...
- P2050 [NOI2012]美食节(费用流)
P2050 [NOI2012]美食节 P2053 [SCOI2007]修车的加强版 因为数据较大,一次性把所有边都加完会T 于是我们每次只连需要的边跑费用流 就是开始先连所有厨师做倒数第1道菜 跑费用 ...
- 提交post请求,参数为xml格式
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- n阶幻方
前序 最近在学习一些经典的算法,搞得头昏脑涨,就想换换脑子.在家里的旧书堆里面乱翻,无意中将一本具有十多年历史的小学数学奥林匹克竞赛的书发掘了出来,能放到现在挺不容易的,就拿起来随便翻翻.看了看目录, ...
- 网站安装 https 证书
1.点击进入官网 数安时代 2.点击选择你需要的ssl 证书 3.点击进入选择 免费申请 ,填写你需要 安装 ssl 证书 的域名 4.根据你的需求选择,我这里选择的是 数安时代 ,接下来按照步骤操 ...
- LeetCode4. 两个排序数组的中位数
4. 两个排序数组的中位数 问题描述 There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the ...