1、初识
最早学C还是在学校,那时候用TC,后来工作用到是VC。很长一段时间里面,IDE和语言、框架一直没分太清楚,可能是因为特定语境下面混淆问题也不大。
C++是语言,VC是IDE,MFC是框架
Object Pascal是语言,Delphi是IDE,VCL是框架
不过后来Borland也把Delphi称为语言了
初学时,很大的困惑源自IDE里面到各种设置,虽然IDE是为了提高效率,为人性化做来很多工作,但是对我这样到初学菜鸟来说,确实很大到压力。既然IDE是生产力工具,学习IDE的使用就显得尤为重要,效率的提高也是很显著的。
长期使用IDE会带来一个问题,没有IDE的情况下,或者特殊的情况,比如生产环境紧急需要做点什么,临时需要调整点什么,可能无从下手。 所以开始反思本源的东西。
2、程序、程序语言
简单说,文件名以exe为扩展名的就是程序,当然这是指传统的原生开发(直接调用操作系统功能,通常是指非网页的那些应用) 对于原生开发来说,纵然有千万种语言,最后之所以能够运行,是因为遵循操作系统给定的规范。简单来说,操作系统提供什么样的服务,程序才能拥有什么样的功能。
操作系统直接连接底层硬件设备,提供最基础的功能。程序通过组合这些功能完成各种功能。
操作系统能执行的这个程序,不是面向人,而是面向机器的,也被称之为机器码,这个程序我们直接写是写不出来的,根本也看不懂。所以就有了各种工具和语言来帮助我们完成这个工作。
程序语言–>编译工具–>链接工具–>可执行程序程序语言就是用接近自然语言的语法来编写程序。然后通过一系列工具来生成面向机器的可执行程序。
为了开发程序方便,操作系统会把各种功能分门别类的提供出来,比如在屏幕上画线,比如打印机上输出一个文字等等。这就是API。
每个领域关注的程序功能不尽相同,所以造就了很多专门领域的程序语言,如logo语言,matlab等等,有很多专属行业的程序语言。
也有很多语言不需要最终输出成一个可执行程序,只是方便计算。
除此之外,就是通用语言,比如C,Delphi,C++等等
这些语言都有很严密的范式要求,就是有自己的语法。
3、IDE
有了语言,也有了语法,我们就可以开始编写程序了。
对于一个功能比较简单的程序来说,需要编写的内容比较少,写好以后经过编译和链接就生成可执行文件了。
这当然是比较理想的状态,有了语法,自然需要熟悉语法,如果在记事本里面编写程序,这变成一个很大的问题。
自然就会有语法错误。有了错误就希望能快速定位到错误在哪里。
如果功能很复杂,那定位问题就麻烦。
IDE的全称是集成开发环境。
它解决了语法,编译等一系列重复劳动。
最近重新开始做C,才意识到一个问题,VS天然把cl和link结合在IDE里面,简化到很多工作,也增加来困扰。所有到配置都是为了最后执行cl和link做准备到。
虽然Vs已经放弃来make文件,也许我在配置管理上还没有入门,但是其实make文件是很方便到。
接触到gcc以后,才发现这种感觉更加明确。gcc带到不同到参数,执行不同到效果。如果对整个编译器到使用都很熟悉,其实用make文件也是可以到。何况make文件本来也不经常变。
4、编译和链接##
为啥要区分编译和链接,为啥不能一步到位。现在的理解,还是计算机里面普遍采用到分层思想。
多一个层次就多一种扩展的可能,也给各种工具提供了机会。
编译可以把源代码编译成中间格式,而这个中间格式没有操作系统和平台之分。
链接是把这些中间结果做成当前平台可用到格式。也就是说link可以不同,make到结果却可以一致。减轻来link到负担,也让link更加关注自己要关注到部分。
##5、make文件和configuration文件
编译linux很多程序到时候,大多都可以使用源码方式安装。前面提到make文件,它到作用其实很简单。
一个c源文件,我们可以通过
$ gcc -o 源文件 执行程序
去做,单个文件问题不大,如果整个工程有成千上万个文件,那这个gcc就要写很多遍,显然不符合计算机要解脱人类到目标。
make文件做来2个事情:
1. 批处理编译源文件
2. 编译需要编译到,减少无用功
有来make文件以后,其实还会带来一个新的问题,如果项目很大,编译链接到过错很长,可能长达1个小时,甚至更久,如果中间出问题怎么办,当前到源码编译条件是否具备。
所以需要另外一个东西来快速定位是否有此类前置条件,这就是configuration文件到作用,快速检测