前几天,有位小朋友问我,SDK与IDE有啥区别。我在这做一下详细的解答。加入了很多本人的理解,可能会有错误。希望路过的大牛能够及时给予指正,避免误导太多的人。

    本文使用的操作系统是Ubuntu Linux 10.04 LTS。

    一、编辑器(editor)

    通常,在程序设计里面,editor指的是文本编辑器,它通常是一个编辑源代码的工具。

    您可能就说了,不就是一个“记事本”吗?有啥的。

    可是事实上并不是这样的。

    一个优秀的editor能够提供以下功能:

    1、语法高亮。

    比如,我输入

  1. int a; 

    一个优秀的editor应该自动将关键字int以特殊颜色显示。例如在gedit里面,选择C++编辑模式,关键字int会被变成绿色。这样,我阅读代码的时候就能够非常清晰的看懂这句声明。

    2、自动补全。

    比如,我输入

  1. vector<int> a; 
  2. a. 

    当我在a后面输入一个点号"."的时候,一个优秀的editor应该弹出一个列表,提示vector这个类全部的成员供我选择。

    3、快速定位。

    在阅读代码的时候,看见一个函数的调用。但是通过函数的名字无法详细准确地了解这个函数的功能。我们希望找到函数的定义来阅读函数的源代码。

    又或者,在代码的某处,看见一个变量。我们想知道这个变量的类型。所以需要找到变量的声明/定义。

    一个优秀的editor应该提供这项功能,通过简单的操作就能够迅速地找到一个标识符的声明/定义。

    在editor中,有两大神器,一个叫emacs,一个叫vi/vim。有人说,世界上的editor分三种,第一种是emacs,第二种是vi,第三种是其它。也有人说,vi是编辑器之神,emacs是神之编辑器。

    二、编译器(compiler)

    简单讲,compiler就是将“高级语言”翻译为“机器语言(低级语言)”的程序。高级计算机语言便于人编写,阅读,维护。低级机器语言是计算机能直接解读、运行的。compiler将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。(摘自“编译器_百度百科”)

    所以,compiler实际上就是一个翻译。

    我们常用的C语言compiler有gcc,对应的C++语言的是g++。

    例如,我们在Terminal中执行

$ touch code.c
$ gcc -c code.c
$ ls

    就会发现在当前目录下,出现了一个code.o文件。这个文件就是gcc编译code.c文件得到的目标文件。

    三、SDK(Software Development Kit,软件开发工具包)

    工具包是啥意思?就是装着一堆工具的包呗。工具是干啥用的?就是让我们的生活更加方便的东西呗。

    比如说,我们写一个大一点的工程,工程里面有许多源文件。这么多源文件,要是逐个用gcc命令去编译肯定会累死的。而且,我如果只修改了一个源文件,那么事实上并不是所有的文件都需要重新编译的。有一个工具,叫做make。我们只需要编写一个Makefile就可以使用make工具完成整个工程的编译。它的存在大大的简化了我们的工作。(关于make工具,请查询相关资料。《GNU make中文手册》:http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html

    可是,事实上,编写Makefile也不是一件简单的工作,尤其对于新手来说。学习编写Makefile也是需要花一些时间的。Qt SDK里面有一个工具叫qmake。有了它,我们只需要写一个简单的工程文件(.pro),之后调用qmake命令,就能够自动生成Makefile文件。

    再比如说,在Qt里面,写界面有两种方式。一是用代码写。二是用XML语言写(就是Qt里面的.ui文件)。而且第二种语言更方便。不过g++编译器无法直接编译XML语言,需要将XML语言转化为C++语言才能进行编译。Qt SDK里面有一个工具叫uic(命令是uic-qt4),它能够将XML语言翻译成C++语言(由*.ui文件生成ui_*.h文件)。

    事实上,只需要有compiler就可以将标准C++代码编译成可执行程序。如果我们需要用第三方库(如Qt),我们只需要用compiler和Qt提供的相关SDK就可以编译Qt工程。

    感谢大牛lfted指出错误:在现在的SDK的概念中,将IDE也认为是一种工具。因此实际上SDK应包含两部分:一是必要的开发工具(通常都是CLI命令,这些工具是必要的。),二是一些图形界面下的辅助开发工具(如Qt Creator、Qt Designer等。没有这些东西也能正常的编译Qt工程)。

    四、IDE(Integrated Development,集成开发环境)

    这是对很多人造成最大误解的东西。事实上,IDE不是必需的,它只是为开发提供方便。例如:通过一个简单的按钮来完成多个步骤。

    我们以Qt官方提供的IDE:Qt Creator来分析一下。

    我们用Qt Creator来打开一个工程文件(.pro文件)。然后,点击Build按钮进行编译。

    点击Build按钮之后,Qt Creator做了哪些事呢?Qt Creator首先调用qmake命令生成Makefile,然后调用make命令生成可执行文件。

    事实上,我们只需要在命令行中输入:

$ qmake
$ make

    就可以编译一个Qt工程。而qmake和make都是SDK中的两个工具。

    总结起来:IDE(Qt Creator)用一个简单的按钮完成了某些工作,但是事实上,IDE是调用SDK中的某些工具(qmake、make)来完成的。