admin 管理员组

文章数量: 1087139


2024年3月29日发(作者:索引的原理)

注意:以下适合 PC 环境

●C/C++ 编译器需要的环境变数设定

古早以来,PC 上的 C 编译器,就需要两个环境变数:

LIB:这个环境变数告诉编译器说,必要的 libraries 在哪里(哪个磁碟目录下)

INCLUDE:告诉编译器说,必要的 header files 在哪里(哪个磁碟目录下)

为了让我们能够在任何 working directory 都叫得到编译器,当然我们必须设定 PATH。

C/C++ 编译器都需要这三个环境变数。

●以 Visual C++ 为例

以 Visual C++ 为例,如果安装後的档案布局如下:

C:MSDEVVC98BIN : 这里放有编译器

C:MSDEVVC98INCLUDE : 这里放有 C/C++ header files

C:MSDEVVC98LIB : 这里放有 C/C++ standard libraries

那麽你可以写一个批次档如下:

set PATH=C:MSDEVVC98BIN;C:MSDEVCOMMONMSDEV98BIN

set INCLUDE=C:MSDEVVC98INCLUDE

set LIB=C:MSDEVVC98LIB

之所以需要另外设定 PATH=C:MSDEVCOMMONMSDEV98BIN,是因为编译器 执行时需要

,而它被安装於 C:MSDEVCOMMONMSDEV98BIN 之中。

如果你写的程式不只是单纯的 C/C++ 程式,还用到了 MFC,一样可以在 console mode 下编译,这

时候你的环境变数应该如此设定:

set PATH=C:MSDEVVC98BIN;C:MSDEVCOMMONMSDEV98BIN

set INCLUDE=C:MSDEVVC98INCLUDE;C:MSDEVVC98MFCINCLUDE

set LIB=C:MSDEVVC98LIB;C:MSDEVVC98MFCLIB

多指定了 MFCINCLUDE 和 MFCLIB,就可以让编译器和联结器找到 MFC 的 header files 和 libraries。

如果你还需要用到 ATL,就得在 INCLUDE 环境变数中再加上 C:MSDEVVC98ATLINCLUDE。

●以 Borland C++Builder 为例

以 Borland C++Builder 为例,如果安装後的档案布局如下:

C:BORLANDCBuilder3BIN : 这里放有编译器

C:BORLANDCBuilder3INCLUDE : 这里放有 C/C++ header files

C:BORLANDCBuilder3LIB : 这里放有 C/C++ standard libraries

那麽你可以写一个批次档如下:

set PATH=C:BORLANDCBuilder3BIN

set INCLUDE=C:BORLANDCBuilder3INCLUDE

set LIB=C:BORLANDCBuilder3LIB

●如何在 console 中编译 C/C++ 程式

首先,开启一个 DOS Box(DOS Prompt, DOS VM),然後在该 DOS box 中执行上述写好的批次档,完

成环境变数的设定。你可以再在 DOS 提示号下键入 set 命令,看看环境变数的设定内容正确与否。

然後就可以直接在 DOS 提示号下键入编译器名称,开始编译了。如果你使用 Visual C++,就这麽做:

C:> CL

如果你使用 C++Builder,就这麽做:

C:> BCC32

至於特殊情况下需要什麽特殊的 options,就必须自己查一下啦。只要执行 CL /? 或 BCC32(其後不

加任何引数),便可看到所有的 compile options。

●编译器与联结器的关系

早期的编译过程与联结过程是分开的。换句话说我们必须做两个动作:

C:>Cl

C:> LINK xxx (xxx代表各个必要的 libraries)

或是:

C:> BCC32

C:> TLINK32 xxx (xxx代表各个必要的 libraries)

如今的编译过程与联结过程当然还是分开的,但是我们的动作只需一个:

C:> CL

或是:

C:> BCC32

这是因为编译器变聪明了,除非你指定 /c option(表示只编译不联结),否则它便自动为你呼叫联结

器进行联结动作。过去以来颇令 programmer烦恼的「该使用哪些 libraries」的问题,编译器也有了

聪明的解决方案:它将程式中用到的 library functions 记录起来,同时也录下它们所属的library 名称,

於是联结器就可以从这个表格中知道要联结哪些 libraries 了。


本文标签: 联结 环境 变数 编译器 需要