本文来自CSDN博客
 
 
 
★★ 注意:以下适合 PC 环境 ★★
 
●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。
 
 
 
 
 
●以 Borland C++Builder 为例
 
 
 
以 Borland C++Builder 为例,如果安装後的档案布局如下:
 
 
 
C:\BORLAND\CBuilder3\BIN : 这里放有编译器 BCC32.EXE
 
C:\BORLAND\CBuilder3\INCLUDE : 这里放有 C/C++ header files
 
C:\BORLAND\CBuilder3\LIB : 这里放有 C/C++ standard libraries
 
 
 
那麽你可以写一个批次档如下:
 
 
 
set PATH=C:\BORLAND\CBuilder3\BIN
 
set INCLUDE=C:\BORLAND\CBuilder3\INCLUDE
 
set LIB=C:\BORLAND\CBuilder3\LIB
 
 
 
 
 
●如何在 console 中编译 C/C++ 程式
 
 
 
首先,开启一个 DOS Box(DOS Prompt, DOS VM),然後在该 DOS box 中执行上述写好的批次档,完成环境变数的设定。你可以再在 DOS 提示号下键入 set 命令,看看环境变数的设定内容正确与否。
 
 
 
然後就可以直接在 DOS 提示号下键入编译器名称,开始编译了。如果你使用 Visual C++,就这麽做:
 
 
 
C:\> CL test.cpp <Enter>
 
 
 
如果你使用 C++Builder,就这麽做:
 
 
 
C:\> BCC32 test.cpp <Enter>
 
 
 
至於特殊情况下需要什麽特殊的 options,就必须自己查一下啦。只要执行 CL /? 或 BCC32(其後不加任何引数),便可看到所有的 compile options。
 
 
 
 
 
●编译器与联结器的关系
 
 
 
早期的编译过程与联结过程是分开的。换句话说我们必须做两个动作:
 
 
 
C:\> Cl test.cpp
 
C:\> LINK test.obj xxx (xxx 代表各个必要的 libraries)
 
 
 
或是:
 
 
 
C:\> BCC32 test.cpp
 
C:\> TLINK32 test.obj xxx (xxx 代表各个必要的 libraries)
 
 
 
 
 
如今的编译过程与联结过程当然还是分开的,但是我们的动作只需一个:
 
 
 
C:\> CL test.cpp
 
 
 
或是:
 
 
 
C:\> BCC32 test.cpp
 
 
 
这是因为编译器变聪明了,除非你指定 /c option(表示只编译不联结),否则它便自动为你呼叫联结器进行联结动作。过去以来颇令 programmer烦恼的「该使用哪些 libraries」的问题,编译器也有了聪明的解决方案:它将程式中用到的 library functions 记录起来,同时也录下它们所属的library 名称,於是联结器就可以从这个表格中知道要联结哪些 libraries 了。
 
 
 
 
 
 
 
●环境变数与 DOS VM(Virtual Machine)的关系
 
 
 
你可以同时开起多个 DOS Box,但是你不能够在某个 DOS Box 中执行上述批次档而在另一个 DOS VM 中享受其环境设定。
 
 
 
这是因为每个 DOS Box 都是一个 Virtual Machine,彼此谁也看不到谁,互不相干。
 
 
 
除非你在 autoexec.bat 中就设定好上述那些环境变数。这麽一来,任何一个新开启的 DOS VM 便会因为继承最原始的 DOS VM 环境,而继承了那些变数设定。
 
 
 
 
 
●环境空间(environment space)不足
 
 
 
最易造成大家困扰的,就是环境空间(environment space)不足的问题。
 
 
 
当你安装好 Visual C++,会在其 BIN 子目录中发现一个名为 VCVARS32.BAT 的档案。这个档案其实就是做上述的环境变数设定动作(这在 Visual C++ 安装过程的最後一个步骤有说明。哎,有多少人安装软体不看说明!)。所以,你可以在任何 DOS Box 中执行此档,取代前述我们自己的批次档。
 
 
 
但是通常大家都有失败的经验,得到 "Out of environment space" 的错误讯息。这是因为 VCVARS32.BAT 使用以下句法:
 
 
 
set INCLUDE=%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
 
set LIB=%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
 
 
 
意思是把 INCLUDE 的原始设定(%INCLUDE%)再附加其他设定,并把LIB 的原始设定(%LIB%)再附加其他设定。如果原始设定已经很长,多来这麽几次,便 "Out of environment space" 啦!
 
 
 
做法之一是调高环境空间的大小。请在 c:\config.sys 档中加上这行:
 
 
 
shell=C:\COMMAND.COM C:\ /E:1024 /P
 
 
 
其中 /E:1024 便是表示将环境空间调为 1024 bytes。(不够?再调)
 
 
 
做法之二是不要使用 VCVARS32.BAT 的那种「附加」句型,改用前述我们自己的批次档。要知道,我们可能有好几个编译器环境(VC、BCB、G++ ┅),需要轮番测试我们的程式;如果使用「附加」句型,多来几次,再大的环境空间也会消磨殆尽。
 
 
 
方法一和方法二要双管齐下唷。
 
 
 
 
 
●有任何规模上的限制吗?
 
 
 
使用 console 模式(或称 command line 模式)来编译联结程式,程式的大小可否有任何规模上的限制?答案是没有!
 
 
 
它的缺点是没有工具帮你管理档案、没有预设值让你少打几个字、没有分析工具帮你整理 objects,让你浏览 objects、symbols┅。所以一旦你基本功学会了,要开始中大型程式的设计,当然以整合环境(IDE)为佳。
 
 
 
 
 
●不要误会
 
 
 
我这不是开倒车,要大家回到茹毛饮血的时代,都回头去做山顶洞人。而是我觉得,对於一位 C/C++ 初学者,整合环境(IDE)的运用恐怕带来一头雾水,不如先在 console mode 下作业。一方面多认识一些环境设定方面的常识,满好的,一方面比较方便好用,也不必写个 1000 行的小小练习还得启动 五五加农炮,一方面求知的力量可以全部放在语言的练习上头。
 
 
 
等有了一定的程度,再使用整合环境,就不会如坠五里雾了。
 
 
 
-- the end
 
 
 
原始链接 : http://jjhou.csdn.net/article99-10.htm
 
 
 
 
 
 
 
==========================================================
 
 
 
 
 
 
 
偶滴说明:
 
 
 
以VC 9.0为例,假如cl.exe所在目录为D:\Program Files\Microsoft Visual Studio 9.0\VC\bin下(具体这个目录由你安装的位置所决定),在cmd中,切换到这个目录下,然后输入cl.即:
 
 
 
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>cl
 
 
 
则可能会出现如下的情况,附图上来 (注:VC6.0可能不会提示没有找不到mspdb60.dll,但VC8.0和VC9.0可能会提示该错误)
 
 
 
对于这个的解决办法有几种,一种是到网上下载mspdb60.dll,然后把它拷贝到C:\WINDOWS\system32目录下
 
 
 
第二种解决办法是:在D:\Program Files\Microsoft Visual Studio 9.0\VC\bin目录下,有个批处理文件VCVARS32.BAT,具体可使用dir命令查看,在Bin目录下,可以直接运行输入VCVARS32.BAT,即如:
 
 
 
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>VCVARS32.BAT
 
 
 
然后再使用cl命令,这样就不会提示找不到mspdb60.dll了,输入cl命令会有这样的输出:
 
 
 
D:\Program Files\Microsoft Visual Studio 9.0\VC\bin>"D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
 
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
 
 
 
 
 
注:使用第二种方法的好处是,直接使用编译器提供的批处理文件VCVARS32.BAT,则整个命令行环境都被设置好了,而使用第一种方法,还需要设置一些环境变量,需要自己写批处理,否则会出现类似如下的错误,如:
 
 
 
LINK : fatal error LNK1104: cannot open file "LIBC.lib"
 
 
 
fatal error C1034: iostream: no include path set
 
 
 
所以这里要设置,PATH和LIB以及INCLUDE等环境变量
 
具体可以参见本篇文章.不过这个设置是临时性设置的,每次打开DOS窗口都要再运行一次批处理
 
 
 
当然,如果你在安装VC9.0(VC6.0有的,VC9.0也应该有吧,即安装的时候有是否注册环境变量提示)的时候,注册了环境变量的话,在安装的时候,不知道大家有没有注意到.有个窗口,叫Setup Environment Variables,在这个窗体中,有个单选框,名字叫Register Environment Variables,注册了它的话,一切都不需要再设置了,可以直接编译运行的,如果在安装的时候忘记注册了,也有解决办法,可以对着我的电脑点右键-->属性-->环境变量进行设置,类似于配置JDK环境一样,这里不详述,这样设置之后就不是临时性设置了,每次开启DOS就不用在设置了.可以直接编译运行程序了
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

如何在DOS下用C/C++ 编译器的更多相关文章

  1. 如何在DOS下以管理员身份执行命令?

    原创 普通User的DOS窗口: 以管理员身份运行的DOS窗口: 转换(Windows10系统下): 13:11:55 2018-10-18

  2. 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序

    首先说明一下背景: 为什么要在DOS界面编译C/C++源程序?有很多现成的开发环境(IDE)如:vs, vc++等,这些开发环境集成了编译,调试,使用起来很方便,而且图形化操作界面,简洁明了.但是在开 ...

  3. [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器

    作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...

  4. JAVA手记 JAVA入门(安装+Dos下运行)

    JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...

  5. ActiveX控件的基本操作方法以及如何在VS2010下使用控件

    在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...

  6. 汇编语言程序入门实验一:在dos下对用户输入作出应答

    汇编语言程序入门实验一:在dos下对用户输入作出应答 1,背景 成功预言了今天要上计算机操作系统上机实验课,昨天预习后,今天的两个上机实验做得很成功.但是也有一些问题.问题1:学校的系统目前是wind ...

  7. JAVA设置环境变量和在DOS下运行java程序

    在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...

  8. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  9. DOS下windows系统查看wifi密码

    DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...

随机推荐

  1. python 调试工具

    https://github.com/what-studio/profiling http://blog.jobbole.com/51062/ http://blog.jobbole.com/5209 ...

  2. RC4加密算法

    RC4是Ron Rivest在1987年设计的密钥长度可变的流加密算法.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一. ...

  3. windows下使用代理连接github

    在公司的windows下使用github,因为github被墙,查了查,发现给在windows下的git制定代理很简单,一句话   git config --global http.proxy htt ...

  4. c#winform将全局异常抛出,不用大量写try()catch()

    一.在program.cs处完善成如下,但是这样后只能抛出主线程(UI)的错误,所以请看第二步 /// 应用程序的主入口点. /// </summary> [STAThread] stat ...

  5. C小加 之 随机数

    描述ACM队的“C小加”同学想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(0<N≤100),对于其中重复的数字,只保留一个,把其余相 ...

  6. [MySQL] 数据统计 —— 按周,按月,按日分组统计数据

    知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...

  7. 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...

  8. VMware系统运维(十七)部署虚拟化桌面 Horizon View Manager 5.2 配置池授权

    1.先在域里面新建一个用户组,添加用户 2.点击"授权....",点击"添加...",设置指定的域用户组,点击"确定" 3.授权完成

  9. linux 打包/解包

    zip: 压缩(递归) zip -r x.zip x 解压(覆盖所有) unzip -o x.zip tar: 打包 tar -czvf x.tar x 解包 tar -xzvf x.tar

  10. 跨域 HTTP 请求

    如果你需要从不同的服务器(不同域名)上获取数据就需要使用跨域 HTTP 请求. 跨域请求在网页上非常常见.很多网页从不同服务器上载入 CSS, 图片,Js脚本等. 在现代浏览器中,为了数据的安全,所有 ...