前言:

闲话,并不重要,之所以还要写,主要是对这方面感兴趣。

闲话,其实也很重要,平时也许不太关注这方面,当需要时就很重要了。

起因:

为什么还要写呢?

前两天做一个VC6的小项目,需要添加一些已有的源文件,一般是选择【工程】|【添加到工程】|【文件】再选择文件等,就OK了,但我的VC6却弹出了如下的一个ERROR框:

无法直接添加到工程,该怎么办呢?

方法一

有个方法是从【文件】|【新建】然后新建(并添加到工程)一个源文件,再把要添加的文件COPY&PASTE到这个文件中。有效,但有些麻烦,特别是要添加到工程的文件不在当前目录下的时候,或者如果要添加的文件是要和另外一个工程共享的文件时就会遇到维护性问题等。

方法二

我是很快想到,当使用VC6"选择【工程】|【添加到工程】|【文件】等"这个过程中VC6到底做了什么,如果能手工完成这个过程,不就能解决问题了吗?

注意到VC6是使用工作空间(*.dsw)和工程(*.dsp)来组织管理一个项目的,一般VC6的一个项目使用一个"工作空间"来代表,其中又可以分为几个子项目(工程)并使用"工程"来代表。而dsw文件是工作空间文件,它是用来协调该工作空间内各个工程之间关系的。Dsp文件则就是对应工程的配置文件,工程中包含的文件、工程的编译方式等都在dsp文件中可以配置。

这样要添加一个文件到工程中,只要改一改dsp文件就可以了。

怎么改

使用记事本打开dsp文件:

可以看到,dsp文件的格式和Makefile很相似。这样就不难理解其内容了(怎么理解的——一看就看懂了的,我就是直接看懂了,虽然我对Makefile也只是了解)。

如果添加源文件可以如下图这样添加:

这样就添加了.\Sample2.cpp到该工程中了,然后就是保存,到VC6中更新下,就OK了。

说明:

VS系列的IDE管理项目(这里单指应用程序项目,其他项目类似),最终的目的是要能编译(生成)该项目为一个相应的目标文件(.exe,.dll,.lib等)。这个生成过程:

如图可以看到,一般是先编译,后链接,相应地,这个过程是由cl.exe和link.exe等来完成的。VS这样的IDE有一个很主要的功能就是配置好这些工具的参数(命令行)等,然后再在我们点击编译(生成)时运行这些工具而已(当然还有其他行为,如保存文件)。如VS2008中VC项目的属性中就明确有其命令行配置结果:

如果熟悉这些命令行工具,使用VS这样的IDE,使用这样的属性页真的很方便。

为什么使用IDE?

上面的话也引出一个新的问题,为什么使用IDE,既然命令行工具这么直接和方便,IDE也就是对命令行工具进行了封装而已?

答案就在于这个"封装"。有了这个封装我们就不要再输那么长的命令行了,不要老是对着黑底白字的控制台敲命令的,只要点点鼠标就OK了……

当然,命令行也不一定完全就是那么地不堪,使用Makefile来组织一个工程是也很方便的(不过总会有人对命令行情有独钟,也有人对GUI情有独钟)。