开始这部分内容前,读者需要:

  • C/C++ 语言的基础
  • 了解命令行工具的使用

C/C++ 编译器

常用的编译器有 GNU gcc,Clang,MSVC 等等。编译器一般都是命令行工具(区别于“集成开发环境(IDE)”)。

在命令行界面中编译 C/C++ 程序

编译 C 语言程序,我们可以使用 gcc 工具(要编译 C++ 程序则需使用 g++)。对于 gcc,要编译一个单文件源程序,我们可以这样:

  1. gcc -c test.c -o test.o

其中,“-c”表示“编译(compile)”,连同后面的“test.c”表示“执行编译操作,被操作的文件名为 test.c”;“-o”表示“输出(output)”,“-o test.o”表示将输出的文件命名为“test.o”。也可以省略“-o test.o”一项,则“g++”将以默认文件名输出编译产生的文件。

编译后生成的为“目标文件(Object File)”。目标文件并不能直接运行,我们还需要进行“链接(linking)”的操作。对于本例,我们需要将其与 C 的标准库进行链接。

  1. gcc test.o -o test

和标准库链接并不需要额外的命令。只需要指明需要链接的文件,以及生成的可执行文件的名称即可。

上述的“编译”“链接”操作也可以一步完成:

  1. gcc test.cpp -o test

这一行命令可以直接生成名为 test 的可执行文件。这一个命令执行过程中,会在系统的临时文件夹生成中间所需的目标文件。

分开执行“编译”“链接”操作的好处在于,当工程中文件较多时,不必每次都重新生成目标文件,可以节省时间提高效率。

当然,当工程涉及到多文件时,我们通常会编写一些脚本来简化这些工作。在 *nix 系统上有 make 工具,我们可以通过编写 Makefile 来简化这个流程——它会自动检测构建生成目标所需要的文件是否为最新,如果不是,则执行编译操作。

关于编译器预处理、多文件编程等内容,我们将在其他章节详细阐述。

了解“预编译、编译、汇编、链接”这四个过程对你有很大帮助 - CSDN