用过了N多的IDE工具,还是搞不懂IDE和编译连接程序协调工作的。 下面小做一下研究,在控制台写程序。使用例如,Visual Studio编译C++程序时,我们会在IDE下方的Output窗口中看到编译和连接的全过程,虽然我们看不到弹出的DOS窗口,但实际上是IDE先后启动了Microsoft C++编译器cl.exe和连接器link.exe这两个命令行程序,而cl.exe和link.exe的输出又实时反映到了IDE的Output窗口中。真正了解了IDE的运行机制,我们就可以做很多事了,呵呵,甚至自己写IDE界面。象SlickEdit 就是这么样的工具.支持N种语言,牛死了。
1.C/C++要的环境变量设置
古早以来,PC 上的 C 编译器,就需要两个环境变量:
LIB:这个环境变量告诉编译器说,必要的 libraries 在哪里(哪个磁盘目录下)
INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁盘目录下)
另外,为了让我们能够在任何 working directory 都可以得到编译器,当然我们必须设定 PATH。
一直到现在,C/C++ 编译器都需要这三个环境变数。
那么你可以写一个批处理如下:
set PATH=C:/MSDEV/VC98/BIN;C:/MSDEV/COMMON/MSDEV98/BIN
set INCLUDE=C:/MSDEV/VC98/INCLUDE
set LIB=C:/MSDEV/VC98/LIB
之所以需要另外设定 PATH=C:/MSDEV/COMMON/MSDEV98/BIN,是因为编译器 CL.EXE 执行时需要 MSPDB60.DLL,而它被安装与 C:/MSDEV/COMMON/MSDEV98/BIN 之中。
如果你写的程式不只是单纯的 C/C++ 程式,还用到了 MFC,一样可以在 console mode 下编译,这时候你的环境变量应该如此设定:
set PATH=C:/MSDEV/VC98/BIN;C:/MSDEV/COMMON/MSDEV98/BIN
set INCLUDE=C:/MSDEV/VC98/INCLUDE;C:/MSDEV/VC98/MFC/INCLUDE
set LIB=C:/MSDEV/VC98/LIB;C:/MSDEV/VC98/MFC/LIB
多指定了 MFC/INCLUDE 和 MFC/LIB,就可以让编译器和联结器找到 MFC 的 header files 和 libraries。如果你还需要用到 ATL,就得在 INCLUDE 环境变数中再加上 C:/MSDEV/VC98/ATL/INCLUDE。
当然你可以执行vc 目录你的 VCVARS32.BAT 这个就省事多了。
2。如何编译c/c++程序
进入DOS界面 ,键入
>cl test.cpp <ENTER>
就可以编译,连接了。注意cl省略了/C 选项,就会自动调用LINK 连接程序
完整的编译,连接过程是:
CL /c test.cpp <ENTER>
LINK test.obj ****(***为必要的Libraries)
对于多个文件,最好是写Makefile ,然后用vc 带的NMAKE 执行。
附记:
也就是说,大多数IDE工具都可以在集成环境中调用特定的命令行程序(WIN32里更确切的说法是控制台程序),然后实时捕获它们的输出(这多半是输出到标准的stdout和stderr流里的东西),并将捕获到的信息显示在图形界面的窗口中。
这显然是一种具备潜在价值的功能。利用这一技术,我们至少可以
1. 编写出自己的IDE,如果我们有足够的耐心的话;
2. 在我们自己的应用程序里嵌入全文检索功能(调用Borland C++里的grep.exe工具),或者压缩和解压缩功能(调用控制台方式的压缩解压程序,比如arj.exe、pkzip.exe等);
3. 连接其他人编写的,或者我们自己很久以前编写的控制台程序——我经常因为难以调用一个功能强大但又没有源码的控制台程序而苦恼万分。