精华内容
下载资源
问答
  • 根据几年前微软在美国公布的内容,WINDOWS本身属于微内核系统WINDOWS98总共大概不到10万行代码(具体是2万还是5万记不清了),而WINDOWS2000则已经有20余万行代码,其中80%是用C++编写,其余部分有C和汇编,底层...
    根据几年前微软在美国公布的内容,WINDOWS本身属于微内核系统,WINDOWS98总共大概不到10万行代码(具体是2万还是5万记不清了),而WINDOWS2000则已经有20余万行代码,其中80%是用C++编写,其余部分有C和汇编,底层接口用汇编编写。 

    微内核系统从概念上是指“只包括操作系统的基本功能,例如内存管理和进程管理等等”,就连对各个文件系统的支持也不算在内,不过具体WINDOWS是不是这样设计我就不清楚了。
    所以一个微内核系统的操作系统能够有20万行代码已经很多了。
    之所以微软选择了C++而不想LINUX一样选择C,其根本原因就是WINDOWS操作系统本身是微内核系统,所以扩展性及以后的维护要求非常重要,所以C++的类的概念就能在这里很好的利用,但是毕竟C++的效率不如标准C及汇编,所以在一些明显以效率为重的地方用的还是标准C及汇编。

    编写完毕后,WINDOWS上的其他用户态程序(包括所有驱动程序、计算器、游戏等等所有你现在拿鼠标能够操作的东西)另行开发,例如:扫雷游戏就是用VB写的。

    转载于:https://www.cnblogs.com/zlbeidou/archive/2013/05/15/3079586.html

    展开全文
  • 相信很多朋友都知道Windows Vista,这个系统开发早期比尔盖茨想全部C#写,但是最终因为执行慢而放弃,结果之前无数软件工程师日夜劳作成果一夜之间被宣告作废。 Linux :C Apple MacOS : 主要为C,部分为C

    一、操作系统:

    1. Microsoft Windows :汇编 -> C -> C++

    曾经在智能手机的操作系统(Windows Mobile)考虑掺点C#写的程序,比如软键盘,结果因为写出来的程序太慢,实在无法和别的模块合并,最终又回到C++重写。

    相信很多朋友都知道Windows Vista,这个系统开发早期比尔盖茨想全部用C#写,但是最终因为执行慢而放弃,结果之前无数软件工程师日夜劳作成果一夜之间被宣告作废。

    1. Linux :C

    2. Apple MacOS : 主要为C,部分为C++。 备注: 之前用的语言比较杂,最早是汇编和Pascal。

    3. Sun Solaris : C

    4. HP-UX : C

    5. Symbian OS : 汇编,主要为C++。 (诺基亚手机)

    6. Google Android :2008 年推出: C语言(有传言说是用Java开发的操作系统,但最近刚推出原生的C语言SDK)

    7. RIM BlackBerry OS 4.x : 黑莓 C++

    二、图形界面层

    1. Microsoft Windows UI :C++

    2. Apple MacOS UI (Aqua) : C++

    3. Gnome (Linux图形界面之一,大脚): C和C++, 主要是C。

    4. KDE (Linux图形界面),C++。

    三、桌面搜索工具

    Google Desktop Search : C++

    Microsoft Windows Desktop Search : C++

    Beagle (Linux/Windows/UNIX 下): C# (基于开源的 .net : Mono)

    四、办公软件

    Microsoft Office :在 汇编 -> C -> 稳定在C++

    Sun Open Office : 部分JAVA(对外接口),主要为C++ (开源,可下载其源代码)

    Corel Office/WordPerfect Office : 1996年尝试过Java,次年被抛弃,重新回到C/C++

    Adobe Systems Acrobat Reader/Distiller : C++

    五、关系型数据库

    Oracle : 汇编、C、C++、Java。主要为C++。

    MySQL : C++

    IBM DB2 :汇编、C、C++,主要为C。

    Microsoft SQL Server : 汇编 -> C->C++

    IBM Informix : 汇编、C、C++,主要为C。

    SAP DB/MaxDB : C++

    六、Web Browsers/浏览器

    Microsoft Internet Explorer : C++

    Mozilla Firefox : C++

    Netscape Navigator :The code of Netscape browser was written in C, and Netscape engineers, all bought to Java (see M. Cusumano book and article) redeveloped the browser using Java. It was too slow and abandoned. Mozilla, the next version, was later developed using C++.

    Safari : (2003年1月发布)C++

    Google Chrome : (2008的发布)C++

    Sun HotJava : Java (死于1999年)

    Opera : C++ (手机上占用率比较大)

    Opera Mini : Opera Mini (2007) has a very funny architecture, and is indeed using both C++ and Java. The browser is split in two parts, an ultra thin (less than 100Kb) “viewer” client part and a server side responsible of rendering. The first uses Java and receives the page under the OBML format, the latter reuses classical Opera (C++) rendering engine plus Opera’s Small Screen Rendering, on the server. This allows Opera to penetrate various J2ME-enabled portable devices, such as phones, while preserving excellent response time. This comes obviously with a few sacrifices, for instance on JavaScript execution.

    Mosaic : 鼻祖(已死) C 语言

    七、邮件客户端

    Microsoft Outlook : C++

    IBM Lotus Notes : Java

    Foxmail : Delphi

    八、软件开发集成环境/IDE:

    Microsoft Visual Studio : C++

    Eclipse : Java (其图形界面SWT基于C/C++)

    Code::Blocks : C++

    九、虚拟机

    Microsoft .Net CLR (.NET的虚拟机): C++

    Java Virtual Machine (JVM) : Java 虚拟机:C++

    十、ERP软件 (企业应用)

    SAP mySAP ERP : C,后主要为“ABAP/4”语言

    Oracle Peoplesoft : C++ -> Java

    Oracle E-Business Suite : Java

    十一、商业智能(Business Intelligence )

    Business Objects : C++

    十二、图形处理

    Adobe Photoshop : C++

    The GIMP : C

    十三、搜索引擎

    Google : 汇编 与 C++,主要为C++

    十四、著名网站

    eBay : 2002年为C++,后主要迁至Java

    facebook : C++ 和 PHP

    This line is only about facebook, not its plugins. Plugins can be developed in many different technologies, thanks to facebook’s ORB/application server, Thrift. Thrift contains a compiler coded in C++. facebook people write about Thrift: “The multi-language code generation is well suited for search because it allows for application development in an efficient server side language (C++) and allows the Facebook PHP-based web application to make calls to the search service using Thrift PHP libraries.” Aside the use of C++, facebook has adopted a LAMP architecture.

    阿里巴巴和淘宝:php->C++/Java(主要用)

    十五、 游戏 :

    汇编、C、C++

    星际争霸、魔兽争霸、CS、帝国时代、跑跑卡丁车、传奇、魔兽世界… 数不胜数了,自己数吧

    都是用C++开发的,C++语言靠近系统地称,执行速度最快。比如你的两个朋友与你分别玩用VB、Java、与C++编写的“跑跑卡丁车”,你玩C++编写的游戏已经跑玩结束了,发现你的两个朋友还没开始跑呢,那是相当的卡啊,

    十六、编译器

    Microsoft Visual C++ 编译器: C++

    Microsoft Visual Basic 解释、编译器:C++

    Microsoft Visual C# : 编译器: C++

    gcc (GNU C compiler) : C

    javac (Sun Java compiler) : Java

    Perl : C++

    PHP : C

    十七、3D 引擎

    Microsoft DirectX : C++

    OpenGL : C

    OGRE 3D : C++

    十八、Web Servers (网页服务)

    Apache : C和C++,主要为C

    Microsoft IIS : C++

    Tomcat:Java

    Jboss:Java

    十九:邮件服务

    Microsoft Exchange Server : C->C++

    Postfix : C

    hMailServer : C++

    Apache James : Java

    二十:CD/DVD 刻录

    Nero Burning ROM : C++

    K3B : C++

    二十一:媒体播放器

    Nullsoft Winamp : C++

    Microsoft Windows Media Player : C++

    Microsoft Windows Media Player : C++

    二十二:Peer to Peer (P2P软件)

    eMule : C++

    μtorrent : C++

    Azureus : Java (图形界面使用基于C/C++的SWT,类Eclipse)

    二十三:全球定位系统(GPS)

    TomTom : C++

    Hertz NeverLost : C++

    Garmin : C++

    Motorola VIAMOTO : 2007年6月,停止服务。 Java。

    二十四:3D 引擎

    Microsoft DirectX : C++(相信玩游戏的同学都知道这个,现在最高版本是DX11)

    OpenGL : C

    OGRE 3D : C++

    二十五:其他相关

    OpenStack:Python

    展开全文
  • 编写操作系统的平台之争:Windows还是*nix

    千次阅读 热门讨论 2009-05-20 08:16:00
    平台之争:Windows还是*nix本文摘自于渊编写的《oranges:一个操作系统的实现》一书 读到这里,读者可能发现书中经常出现“如果你是Windows”或者“如果你Linux”这样的字眼。有时这样的字眼甚至可能影响...

    平台之争:Windows还是*nix

    本文摘自于渊编写的《orange's:一个操作系统的实现》一书

        读到这里,读者可能发现书中经常出现“如果你用的是Windows”或者“如果你用的是Linux”这样的字眼。有时这样的字眼甚至可能影响到你的阅读,如果真的这样请你原谅。我试图照顾尽量多的读者,但是对每一个人来讲,却必须面临一个选择──在什么平台下开发。本书第一版使用的是Windows平台,而在第二版中,我投诚了。接下来你会发现,虽然以后的行文会最大限度地兼顾Windows,但总体是以Linux为默认平台的。
        其实在什么平台下开发,有时纯粹是口味问题,或者是环境问题──你开始接触计算机时使用什么,很大程度上取决于你周围的人使用什么,而这往往对你的口味产生巨大而深远的影响。然而最早接触的未必是最适合的,在我亲身体会和比较之后,我决定从Windows彻底换到Linux,我想在这里说说为什么。请注意这不是布道会,更不是你开发自己的操作系统必须阅读的章节,我仅仅是谈谈我个人的体会,希望能对你有所启发,同时解释一下为什么第二版会有这样的改动。
        在第一版成书的时候,我已经在使用Linux,但是用得并不多,主要是觉得用不习惯,而现在过了两三年,我已经基本不用Windows,在Windows下我会觉得很不习惯。我的这一经历至少有两点启示:第一是Linux不好用是个误解(有一种说法是Windows的桌面更好用,这是个复杂的误解),好不好用是习惯问题;第二是如果你有兴趣使用一样你不熟悉的东西,不要因为刚开始的不习惯而放弃。
        其实对于Linux和Windows的误解有很多,我把这种误解归结为操作系统文化上的差异。其实在提起两种系统时,人们往往拿一些具体的事情来做比较。比如比较它们的安装过程、使用方法,甚至是界面。但实际上隐藏在表面背后的是两种完全不同类型的文化,或者称之为不同的理念。
        对于Windows而言,它的文化植根于微软公司的愿景,“让每个家庭的每个桌面上都有一台电脑”,当然他们希望此电脑内运行的是Windows操作系统。这个理想加上Windows作为商业软件的性质,决定了Windows具有相当程度的亲和力,用户界面显得相当友好。岂止友好,它简直友好到每个人──无论儿童还是老人,受过高等教育还是只念过小学──都能比较容易地开始使用电脑,这无疑是微软对这个社会的巨大贡献。但是界面友好并不一定就完美了,这一点暂且按下不表,我们先来说说Linux。
        Linux的文化很大程度上来源于UNIX,UNIX所倡导和遵循的文化也被称为UNIX哲学[8],其中很重要的一条原则叫做“做一件事并做好”[9],这听上去跟Windows的界面友好说的不是一码事,但其实仔细分析起来大有关联。做一件事并做好意味着两件事情,第一件事就是工具之间可以协同作战,不然各人做各人的,无法完成复杂应用;第二件事就是接口要统一,不然无法做到协同。这个统一的接口就是文本流(text stream),这也就意味着,命令行是UNIX文化的核心。而Windows的做法大有不同,因为要界面友好,于是不能指望用户开始就知道怎么把工具串接在一起,所以Windows选择任何应用都自己完成所有功能──至少让用户看起来如此,这使得每个工具都各自为战,从而增加了每个程序的复杂性和开发成本。不仅如此,由于功能都是软件开发者定好的,所以你基本上不能指望大部分的程序具备可扩展性,而在UNIX下,大部分的程序都可以跟其他程序协同起来完成程序不曾“设计”的功能。这也是上文我说“界面友好并不一定完美”的原因,友好是有代价的。
        那么UNIX是一个“不友好”的系统吗?这个问题其实没有看起来那么简单。首先是UNIX下流行的桌面环境正在越来越“友好”,你甚至可以将其配置得看上去跟Windows别无二致,不过关键点不在于此,而在于长期来看,UNIX的学习成本并不比Windows要高,但收益却要高得多。我们刚刚提到,友好是有代价的,而且代价比想像中要高。对于一个初学者,开始的简单容易使他产生错觉,认为电脑是个简单器械,但实际情况并非如此,一旦遇到麻烦,用户很容易陷入束手无策的境地,一旦有一件事情没有现成的软件可以解决,你马上一筹莫展。而UNIX不同,它的学习曲线比较陡峭,但是你一旦入门,就会发现自己的工作可以变得如此轻松而且有趣。在Windows中,虽然使用一个工具第一步往往很容易,但很快你就容易迷失在一堆嵌套很深名字晦涩的菜单里面,学习这些菜单可不是一件容易的事情,而且在一个工具里学会的东西到了另一个工具里可能就变了样。如果你想看看程序的帮助,有时也是件困难的事情,因为为了达到“友好”的效果,帮助经常也是一层一层的,很难找到自己需要的内容。而在UNIX中,所有的工具都有个手册(Manual),可以通过统一的命令“man”来查看,而且这些手册都是平坦的,你可以一口气从头看到尾,可以随时查看你所要的关键字。此外,除了少数极其复杂的工具,手册基本上是够用的。简而言之,在UNIX中,软件使用看起来复杂了,实际上如果你想真正掌握一个东西,用的时间不会比Windows中更多。况且,在Windows中你很难真正掌握一个东西。
        我并非故意贬低Windows,我说过它对社会的贡献巨大。对于一个平常只用电脑来收收邮件看看电影的用户,它的易用性绝对是巨大的优点,但你我不是这样的用户。我相信阅读本书的人都是程序员,而且都是像我一样喜欢探索的程序员──不喜欢探索的程序员很难有心思写自己的操作系统做消遣。一个程序员的要求和普通用户是不同的,程序员需要了解他的电脑,掌握它,并且可以熟练地让它帮助自己完成工作,从这个角度上讲,UNIX无疑具有巨大的优势。它里面的每个工具都很锋利,你可以组合着使用,持久地使用,而且许多年都不会过时。
        在这里我可以举一个我自己遇到过的例子。在我编写操作系统的文件系统时,需要多次查看某几个扇区的内容,并对其中的数据进行分析。在Linux中,我可以很容易地将od、grep、sed和awk等工具[10]}串在一起完成这项工作,我也可以编写一个简单的脚本,将命令放在脚本中方便取用。而在Windows中,我通常只能在窗口间反复地单击鼠标,费时费力而且效率低下。类似的例子不胜枚举,你一旦熟悉了这些工具,就会发现通过组合它们,你能得到比任何图形界面工具都多的功能。而在Windows下就不得不看具体菜单的眼色了。不仅如此,UNIX下的工具往往学习一次就能长久使用,很少过时。比如刚才提到的几个工具大部分有20年以上的历史,到现在它们依然被广泛使用,即便它们学起来会稍微难一点,平摊在20年里面,成本也是极低的。这就是UNIX哲学,你不需要重复学习,每个工具都好用,而且可以因为跟其他工具结合而发挥多种作用。
        大多数Windows下的软件都有个毛病,它经常试图隐藏一些东西。它的本意是好的,就是让界面更“友好”,但这对程序员有时是件坏事,因为它让人难以透彻地理解软件的所作所为。或许你会说,如果你想理解,你总能理解的。没错,这跟“在UNIX下能做的事情在Windows下都能做”是相似的命题,甚至于,只要安装一些额外的软件(比如Cygwin),你可以在Windows下使用UNIX的命令。问题是即便能做,你也未必去做,这就是所谓文化的力量。理论上你在任何地方都能读书学习,但效率最高的地方还是教室和书房,在客厅舒服的沙发上,你不自主地就拿起了电视遥控器。
        所以以我自己的体会而言,一个程序员最好还是使用类UNIX的操作系统。它能在日常生活中帮你提高自己的水平和工作效率。这一点与摄影有点类似,市面上数量最多的是傻瓜相机,但一个专业的摄影师总是会选择功能复杂的专业级设备,不是傻瓜相机不好,而是适应的人群不同,如果你想成为好的摄影师,那么上手容易的傻瓜相机一定不是你的最终选择。不是好不好的问题,是适不适合的问题。
        上面论及的是两类操作系统文化上的差异,其实即便是纯粹应用层的,也有诸多误解,比如以下几条:
        误解一. Linux难安装。如果你曾被Linux的安装难倒过,我建议你下次试试Ubuntu。在本书第一版开始写作之时,Ubuntu的第一个版本还没有发布[11],但短短几年时间,它已经变成全世界最流行的发行版[12],这与它的易装和易用性是分不开的。笔者本人大规模地使用Linux也是从Ubuntu开始的,它的安装过程一点也不比Windows的难,而且中文资料也相当丰富,很容易找到志同道合的人。Ubuntu的另一特点是它的驱动程序很丰富,支持很多的硬件,大部分情况下驱动程序都能自动安装好,甚至不需要用户参与,在这一点上它甚至比Windows更“友好”。
        误解二. Linux难学。希望你永远记住,电脑不是个简单器械,无论是硬件、操作系统还是应用软件,都经常比看上去复杂得多。所以易用未必是好事,它肯定向你隐瞒了些什么,花一点时间绝对是值得的,尤其是当你想做一个程序员的时候。况且Linux也没那么难学,且不说它的图形界面越来越好用,就是完全用命令行的话,入门也相当容易。而且Linux世界的文档齐全且易于检索,更有高度发达的社区文化,在这里你学到的往往比预期的还要多。
        误解三. Linux难用。再强调一下,Linux的学习曲线是陡峭的,然而一旦你度过了开始的适应期,就会发现原来命令行可以这么好用,原来有这么丰富的工具来提高效率,而且这些好用的工具居然都是自由的[13]!你不需要向作者付费,甚至他们鼓励你使用和传播,你甚至可以随便修改这些工具的源代码,遇到问题可以发一封邮件反馈给作者。这在Windows下都是很难做到的,在那片土地上你很难体会什么叫“自由”。不仅如此,当你熟悉之后会发现,同样一件事情,其实Linux下的解决方案往往比Windows下要简单。就比如我们提到过的安装Bochs一例吧,在Windows下你通常需要先到Bochs网站,在数次单击之后找到下载链接,然后下载,再然后是双击安装程序来安装。在Linux下呢,你看到了,只需要一个命令行就可以了,即便你打字的速度再慢,也比那些鼠标单击操作要快。
        我在此并非贬低鼠标的好处,我每天都使用鼠标,它绝对是个伟大的发明。但是我们应该只在需要它的时候使用它,而不是试图用它来解决所有事情。这就好比图形界面是个好东西,如果你的工作是图形图像处理,很难想像没有图形界面该怎么做,但并不是图形界面在任何时候都是好的。我们应该分辨每一类工作最适合的工具是什么,而不是用一种思维解决所有问题。这也是我说“Windows桌面好用是个复杂的误解”的原因,图形界面是个好东西,Windows把它用得极端了。
        误解四. Linux下软件少。这是最大的一个误区,事实上很少有事情你在Linux下是做不到的。而且Linux的发行版通常都有发达的包管理工具,无论是关键字查找、安装、更新还是卸载都可以用一组统一的命令来完成。这使得你在需要某种软件时,使用简单的命令就可以找到它,很多时候你能找到不止一种。如果你想看看除了od之外还有哪些二进制查看器,在Ubuntu或者Debian下通过一个apt-cache search 'hex.*(view|edit)'[14]命令就能找到十几种,这些都是自由软件,有命令行的也有图形界面的,而在Windows下,怕是又要在浩瀚的互联网中搜索了。
        在Linux中找一些Windows下软件的替代品是很容易的,虽然这种对应有时并非必要。比如字处理软件就有OpenOffice.org、KOffice、AbiWord等选择;图像处理软件有GIMP;多媒体播放软件有MPlayer、Totem等。如果你喜欢玩游戏,Linux下的游戏数量也会让你大吃一惊,不信你可以来这里看一看。
        其实Linux的好处还远不止这些,众所周知的一个优点是它基本没有病毒的烦恼。不是Linux中开发不出病毒来[15],而是因为Linux系统有自身的权限机制作保障,加上软件来源都可信赖,且大部分都是源代码开放的(其中相当一部分都是自由软件),所以说Linux下没有病毒烦恼并非夸张。想想你在与病毒做斗争的过程中浪费了多少时间吧,我已经很久没有这种烦恼了。Windows或许正变得越来越稳定,但Linux一直都很稳定,而且你不需要整天重启你的电脑,笔者的电脑就有时几十天不重启。除非你要升级内核,否则没有很多关机和重启的理由(不管是安装还是卸载,或是对系统内的包进行升级,都不需要重启电脑)。
        作为一个操作系统爱好者,使用Linux的理由还有一条,那就是Linux的内核是“自由”的,注意它不仅仅是“开放源代码”的,你不仅可以获取其源代码,而且可以自由地复制、修改、传播它,当然也包括学习它。如果你也想加入到内核黑客[16]的队伍,那么就先从使用它开始吧。Linux不是完美的,它的问题有很多,但每个问题都是你参与的机会,而这种参与可能是你成为顶尖高手的开始。
        笔者本人完全使用Linux来工作的时间其实很短,几年而已,但我已经深深体会到它给我带来的好处。我并非想说服你,人不能被说服,除非他自己愿意相信。我只是希望你能尝试着去用一用Linux,或者UNIX的其他变种,然后用自己的判断去选择。
        如果你坚持使用Windows,没问题,两者之中都可以很容易地搭建起开发环境,本章后面的部分将会就Linux和Windows分别来做介绍。

    展开全文
  • 在这里最典型的例子就是微软出品的depends软件,它就只有一个depends.exe,无论你把这个depends.exe拷贝到windows xp、windows 7还是windows 10上(无论32位系统还是64位系统),它都能直接运行。它怎么做到的,...

    作者:朱金灿
    来源:clever101的专栏

    一.什么是绿色软件

      我设想过一些简单实用的工具,比如解压缩工具、图像浏览器之类本身就不应该通过安装包来安装。就是说一些简单的工具应该把运行文件下载下来就能用的,而不应该通过安装包来安装。在这里最典型的例子就是微软出品的depends软件,它就只有一个depends.exe,无论你把这个depends.exe拷贝到windows xp、windows 7还是windows 10上(无论是32位系统还是64位系统),它都能直接运行。它是怎么做到的,我试着研究了一番。我用depends打开depends.exe,看看它的依赖库是什么,如下图:
    在这里插入图片描述

    可以看出它依赖的都是windows系统库。我们再看看一些需要安装包的软件如Adobe Audition 3.0的库依赖情况,如下图:
    在这里插入图片描述

    可以看到除了依赖windows系统库,还依赖于vc的运行时库。我们知道vc的运行时库是分不同版本的,如上图的Audition 3.0依赖的就是VC 2003的运行时库。

      比较二者我们可以得出一个结论:是否依赖于vc运行时库是绿色软件和非绿色软件的一大区别。

    二.如何开发绿色软件

      那么问题来了:如何开发绿色软件。这个问题其实应该是如何在编译软件时去除软件对vc运行时库的依赖。我曾经试验过使用VS编译VC工程是无法去除VC运行时库的依赖的。我摸索了一种办法,就是使用makefile编译C/C++代码是可以去除对vc运行时库的依赖。下面是一段示例makefile脚本:

    
    #Microsoft SDKs因个人安装的VS路径的不同而不同
    !include <C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\Win32.Mak>
    #设置编译标记,初始化为FALSE
    CFGSET     =  FALSE
    
    RUN_CLEAN = FALSE
    
    !IF "$(option)"== "1"
    
    CFGSET     =  TRUE
    
    Configuration = Release
    Platform = x64
    #定义release版本的预处理器
    CC_OPTION   = -D_WIN64 -D_NDEBUG -D_WINDOWS
    
    TARGET_MACHINE = X64
    
    !ELSE IF "$(option)"== "2"
    
    CFGSET   =  TRUE
    
    Configuration = Debug
    Platform = x64
    #定义debug版本的编译选项
    CC_OPTION    = -D_WIN64 -D_DEBUG -D_WINDOWS /MDd
    
    TARGET_MACHINE = X64
    
    !ELSE IF "$(option)"== "3"
    
    CFGSET   =  TRUE
    
    Configuration = Release
    Platform = Win32
    CC_OPTION   = -D_WIN32 -D_NDEBUG -D_WINDOWS
    
    TARGET_MACHINE = X86
    
    !ELSE IF "$(option)"== "4"
    
    CFGSET   =  TRUE
    
    Configuration = Debug
    Platform = Win32
    CC_OPTION   = -D_WIN32 -D_DEBUG -D_WINDOWS /MDd
    
    TARGET_MACHINE = X86
    
    !ELSE IF "$(option)"=="5"
    
    CFGSET=TRUE
    RUN_CLEAN=TRUE
    
    !ENDIF
     
    CC         = $(CC_OPTION)
     
    # 提示用法
    
    !IF "$(CFGSET)"== "FALSE"
    !MESSAGE Usage: nmake /f makefile.vc option=1 or 2 or 3 or 4 or 5   
    !MESSAGE
    !MESSAGE where <config> is one of:
    !MESSAGE -  option=1                -  build  x64 release version
    !MESSAGE -  option=2                - build  x64 debug version
    !MESSAGE -  option=3                - build  x86 release version
    !MESSAGE -  option=4                - build  x86 debug version
    !MESSAGE -  option=5                - clear output file
    !MESSAGE
    !MESSAGE
    !ERROR please choose a valid configuration instead"
    !ENDIF
    
    #假如运行清理命令
    !IF "$(RUN_CLEAN)" == "TRUE"
    CLEAN:
    	if exist "..\..\Intdir\Debug_x64\FileSplitAndMerge" (del "..\..\Intdir\Debug_x64\FileSplitAndMerge\*.obj") else echo Debug_x64 not exist
    	if exist "..\..\Intdir\Debug_Win32\FileSplitAndMerge" (del "..\..\Intdir\Debug_Win32\FileSplitAndMerge\*.obj") else echo Debug_Win32 not exist
    	if exist "..\..\Intdir\Release_x64\FileSplitAndMerge" (del "..\..\Intdir\Release_x64\FileSplitAndMerge\*.obj") else echo Release_x64 not exist
    	if exist "..\..\Intdir\Release_Win32\FileSplitAndMerge" (del "..\..\Intdir\Release_Win32\FileSplitAndMerge\*.obj") else echo Release_Win32 not exist
    
    !ELSE
    
    #设置输出文件夹和临时目录文件夹
    OUTDIR =..\..\OutDir\$(Configuration)_$(Platform)
    INDIR =..\..\Intdir\$(Configuration)_$(Platform)\FileSplitAndMerge
    
    #设置所有输出
    all: $(INDIR) $(OUTDIR) $(OUTDIR)\FileSplitAndMerge.exe
    
    #假如不存在$(INDIR)文件夹,就创建它
    $(INDIR) :
         if not exist "$(INDIR)" mkdir $(INDIR)
    
    #假如不存在$(OUTDIR)文件夹,就创建它
    $(OUTDIR) :
        if not exist "$(OUTDIR)" mkdir $(OUTDIR)
    
    #编译资源脚本
    $(INDIR)\Resource.res:.\Resource.rc
        rc.exe /n /v /fo $(INDIR)\Resource.res .\Resource.rc
    
    #编译源码
    $(INDIR)\splitFile.obj:.\splitFile.c
        cl -c  $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\splitFile.c
    
    $(INDIR)\mergeFile.obj:.\mergeFile.c
        cl -c  $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\mergeFile.c
    
    $(INDIR)\Progress.obj:.\Progress.c
        cl -c  $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\Progress.c
    
    $(INDIR)\mainDlg.obj:.\mainDlg.c $(INDIR)\splitFile.obj $(INDIR)\mergeFile.obj $(INDIR)\Resource.res $(INDIR)\Progress.obj
        cl -c  $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\mainDlg.c
    
    
    #链接
    $(OUTDIR)\FileSplitAndMerge.exe: $(INDIR)\mainDlg.obj 
        link /machine:$(TARGET_MACHINE) /INCREMENTAL:YES /NOLOGO /subsystem:windows /out:$(OUTDIR)\FileSplitAndMerge.exe $(INDIR)\splitFile.obj $(INDIR)\mergeFile.obj $(INDIR)\Progress.obj $(INDIR)\mainDlg.obj $(INDIR)\Resource.res kernel32.lib user32.lib gdi32.lib comdlg32.lib Shell32.lib
    !ENDIF
    
    

    三.构建绿色版VS的设想

      如果我们再将思路扩展一下,我们可以组装一个绿色版的VS。一个精简版的VS实际上是由windows SDK、代码编辑器、资源脚本编辑器、编译器、链接器和调试器组成的。windows SDK实际上是一堆头文件和库文件,可以单独抽取出来,代码编辑器可以用文本编辑器,资源脚本编辑器可以用ResEd (Resource Editor)代替,编译器、链接器可以从安装版的VS中抽取出来,调试器可以用windbg代替VS的调试器。上面提到的各种替代品都是绿色软件。文本编辑器用来编写代码,使用makefile编译代码,使用windbg调试代码,这样就不用安装庞大的VisualStudio,每次编写代码时也不用启动庞大的VisualStudio。

    展开全文
  • 因为您可以,并且也您的最佳选择!之所以可用,因为 C# 能够很好地在 Mac、Linux、Android 和 iOS 上运行(对了,还有 Windows);它可以在您最喜爱的编辑器上运行;它在一个稳定的企业级平台上经过了充分的...
  • 因为您可以,并且也您的最佳选择!之所以可用,因为 C# 能够很好地在 Mac、Linux、Android 和 iOS 上运行(对了,还有 Windows);它可以在您最喜爱的编辑器上运行;它在一个稳定的企业级平台上经过了充分的时间...
  • OPC包括一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁。在过去,为了存取现场设备的数据信息,每一个应用软件开发商都需要编写...
  • 一、操作系统: Microsoft Windows :汇编 -> C -> C++  ...备注:曾经在智能手机的操作系统Windows Mobile)考虑掺点C#写的程序,比如软键盘,结果因为写出来的程序太... 备注: 之前的语言比较杂,最早
  • 首先,不管是WINDOWS操作系统、LINUX系统还是苹果操作系统,甚至包括操作系统的鼻祖UNIX操作系统,最早都是用C语言编写的。 实际上UNIX操作系统和C语言都是由贝尔实验室的汤普森(Ken Thompson)和丹尼斯·里奇...
  • 操作系统什么是操作系统?操作系统位于计算机硬件与应用软件之间,一个协调、管理、控制计算机硬件资源与软件资源的控制程序。2.为何要操作系统① .控制硬件② .把对硬件的复杂的操作封装成优美简单的接口,给用户...
  • Windows Script Host个很有意思的东西,利用它跟Windows系统内部的运作,可以把一些相对复杂的问题简单化,比如申请qq号码,完全可以转化成“建立IE进程-》发送模拟按键填写信息”这样一个过程。 什么是Windows ...
  • 什么是操作系统? 操作系统就是管理计算机硬件与软件资源的计算机程序, 同时也计算机系统的内核与基石 没有安装操作系统的计算机,通常称作为“裸机”; Windows就是操作系统的一种: 如果想在裸机一个编写的程序...
  • 编写简单文件系统

    2020-11-16 10:55:43
    什么文件系统来存取数据呢?为了图个方便。试想如果没有文件系统,放置在存储介质(硬盘)中的数据将一个庞大的数据主体,无法分辨一个数据从哪里停止,下一个数据又从哪里开始。通过将数据分为一块一块的...
  • windows中的文件分隔符 \ 和 /都可以 但是在Linux中,文件分隔符只能/ 所以了\\的程序在Linux下会出问题。 而File.separator是系统默认的文件分割符号,屏蔽了这些系统的区别。 File.separator保证了...
  • Rust编写的跨平台文本扩展器 访问。 什么是文本扩展器? 文本扩展器一个程序,该程序可检测何时键入特定的关键字并将其替换为其他关键字。 这在许多方面很有用: 节省大量打字,扩展常用句子。 创建系统范围...
  • Linux学习之认识操作系统windows和Linux文件系统对比、Ubuntu 图形界面入门 1 认识操作系统 1.1什么是操作系统 首先呢我们知道我们在选购电脑的时候基本上都会去看...如果想在裸机上运行自己所编写的程序,就必须
  • ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原因:这主要因为bash后面多了\r这个字符的原因。在linux终端下,输出\r会什么都不显示,只是把光标移到行首。于是终端...
  • 如何你的程序在64位的系统64位python编写的,到新的64位电脑装的32位python,所有的包不要图方便直接从64位python下拷贝过来,全部都不能的,一定要全面重新下载,缺什么下载什么 pip install pyinstaller ...
  • Windows Vision Library是什么(WVL)?

    千次阅读 2006-10-28 13:55:00
    WVL是用标准C++编写,并且它被设计成可以跨平台的程序库, 因此,你可以很容易地在不同的编译器上编译,并且在不同的系统平台上分发应用程序。该程序库是以开放源代码形式发布并且可以免费使用。在使用之前,请先...
  • VBA全称Visual Basic for Applications一种宏语言,主要用来对Windows的应用程序,特别Microsoft Office软件进行功能扩展。因为依托Excel等大众化软件,不需要开发环境配置、工具库配置等步骤就可以直接编写使用...
  • 下面的某一本书上我看到的代码 服务器端代码如下: // easyDoor.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #pragma ...
  • Vutils或Vic Utilities是用编写的实用程序库。 它可以帮助您的编程更轻松,更快,更简单。 信息 Windows 32位和64位 TCHAR-ANSI和UNICODE 最小GW 用于32位应用程序 用于64位应用程序 微软Visual Studio ...
  • Windows VC++系统编程.doc

    2011-01-13 16:53:02
    这些程序C语言编写并使用原始的Windows Application Programming Interface(API)。如在本章稍后所讨论的,这不是写作Windows程序的唯一方法。然而,无论最终您使用什么方式写作程序,了解Windows API都非常...
  • CypherPoker.JS一个完整的,白标签,对等扑克平台,它集成了灵活且高度可定制的Web /桌面游戏客户端,强大的P2P通讯功能,具有数据库集成和可扩展API服务的帐户管理系统,自动加密货币和钱包功能等等。 开源软件...
  • 什么用 Atom? 多平台支持(Windows、Mac、Linux) 界面美观、现代化,使用舒适 最重要的原生Markdown支持,可以离线编写CSDN(Ctrl+Shift+M 开启Markdown实时预览) 安装 Atom 失败的原因 Atom Github 开源...
  • 什么要学习Windows程序设计?

    千次阅读 2016-12-21 10:11:20
    每天我们都在各种工具编写各种程序,这些程序都运行在Windows操作系统上的,不都是Windows程序吗?为什么还要学习Windows程序设计?的确我们都在编写Windows程序,这些程序可能我们通过各种工具提供的控件或...
  • VC++编写勾子程序 一.什么是勾子: 在Windows系统中,勾子(hook)一种特殊的消息处理机制。勾子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 539
精华内容 215
关键字:

windows是用什么系统编写的