注:摘录侯俊杰--在 console mode 中使用 C/C++ 编译器
●C/C++ 编译器需要的环境变数设定
古早以来,PC 上的 C 编译器,就需要两个环境变数:
LIB:这个环境变数告诉编译器说,必要的 libraries 在哪里(哪个磁碟目录下)
INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁碟目录下)
另外,为了让我们能够在任何 working directory 都叫得到编译器,当然我们必须设定 PATH。
从古早以来,一直到现在,C/C++ 编译器都需要这三个环境变数。
●以 Visual C++ 为例
以 Visual C++ 为例,如果安装後的档案布局如下:
C:/MSDEV/VC98/BIN : 这里放有编译器 CL.EXE
C:/MSDEV/VC98/INCLUDE : 这里放有 C/C++ header files
C:/MSDEV/VC98/LIB : 这里放有 C/C++ standard libraries
那麽你可以写一个批次档如下:
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++安装在D:/Program Files/Microsoft Visual Studio下,所以改写批次档如下:
set PATH=D:/Program Files/Microsoft Visual Studio/VC98/Bin;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin
set INCLUDE=D:/Program Files/Microsoft Visual Studio/VC98/Include;D:/Program Files/Microsoft Visual Studio/VC98/MFC/Include
set LIB=D:/Program Files/Microsoft Visual Studio/VC98/Lib;D:/Program Files/Microsoft Visual Studio/VC98/MFC/Lib
然后运行cmd,将以上设置复制粘贴到鼠标闪烁处。如果想要确认路径更改正确,可以键入set命令查看。
注:这样的环境变量修改,仅对本次命令行窗口有效,因为它是一个虚拟设备。如果想要每次进入时,不做这个工作。可以运行VCVARS32.BAT然后设置你的环境变量。为了不影响VC++的原本设置方便集成环境的使用,我并没有实际操作,一个简单的复制粘贴也不见得麻烦。另外还可以在我的电脑-属性-高级-环境变量里直接修改,这个修改也是永久性的。到这里,路径就设置好了。下面试操作一下:
我在F:/盘保存了一个test.cpp文件作为测试文件。文件内容如下:
=======================================
#include <iostream.h>
void main()
{
cout<<"hello"<<endl;
}
=========================================
使用cd命令把当前命令行窗口路径切换到F:/>,然后执行cl test.cpp命令,在F:/盘路径下生成了两个文件,test.obj和test.exe。然后再运行test.exe,就可以看到结果了(输出hello)。
自己另外的体会:在使用Dos下编译win32程序(且调用GUI)时,因为涉及到.rc资源文件的编译,所以需要在编译cpp文件之前,先键入以下代码,对.rc类型文件进行编译生成res类型文件:
rc bmp.rc
可能是因为调用了window API(又或者是调用了GUI,这一点我任然没有搞清楚,这里只是我个人的不完整想法,我会尽力去找到答案的!反正只要是和生成窗口有关的程序),在对cpp文件编译时需要改成以下格式(如果利用了.rc类型文件的):
cl bmp.cpp bmp.res user32.lib gdi32.lib
其中user32.lib和gdi32.lib是windows三大模块的其中两个,为什么只调用这两个还有待探究。
不知道大家有没有同感,在看电子书上的一些小范例的时候,它只是提供了.cpp文件,.h文件以及一些资源文件。每次想要执行试试看的时候,都要重新创建工程,比较麻烦!(以前我就是这么傻傻的做的)如果在DOS下编译,就不会这么麻烦了!
温馨提示:对于小程序比较好,大点的话就比较麻烦咯!