一、程序的编译
1.1 gcc
GCC (GNU Compiler Collection)是 GNU 编译器套件,它支持多种编程语言的编译,包括 C、C++、Objective-C、Fortran、Ada 等。当你直接使用 GCC 命令时,你通常是对单个文件进行编译。基本的使用方式如下:
gcc [选项] 源文件 [-o 目标文件]
- 选项:可以指定编译器的行为,比如
-c
只编译不链接,-o
指定输出文件名,-g
为调试生成信息等。 - 源文件:需要被编译的源代码文件。
- 目标文件:可执行文件或对象文件的名称,默认是
a.out
。
例如,如果你有一个名为 hello.c
的 C 程序,你可以这样编译它:
默认情况:
GCC 在不指定特定优化或调试选项时,默认倾向于一个比较平衡的编译设置,既不开启高阶优化也不特别包含调试信息。
gcc -o hello hello.c
Debug 版本:
要编译一个便于调试的版本,通常会加上
-g
选项来包含调试信息,这样可以在调试器中查看变量值、步进执行等。示例命令如下:
gcc -g -o debug hello.c
Release 版本:
为了编译一个优化过的、用于发布的 "Release" 版本,可以使用
-O
系列的优化级别,其中-O2
或-O3
是常用的优化等级,同时一般不加-g
以减小最终二进制的体积并提高运行效率。示例命令如下:
gcc -O2 -o release hello.c
这将生成一个名为 hello
的可执行文件。
1.2 make
Make 是一个更高级的构建工具,它通过读取名为 Makefile
的特殊文件来自动构建项目。Makefile
中定义了一系列规则,说明了如何从源代码文件构建最终的可执行文件或其他目标文件。这些规则包括依赖关系(哪些文件依赖于其他文件)、编译命令等。使用 Make 的主要优势在于自动化和管理大型项目中的编译过程。
基本的 Make 使用方法很简单,只需在命令行输入 make
即可。Make 会查找当前目录下的 Makefile
,并根据其中的规则自动编译需要更新的文件。
Makefile文件:
hello: hello.o gcc -o
hello hello.o
hello.o: hello.c
gcc -c hello.c
在这个例子中,hello
是最终的目标,它依赖于 hello.o
。而 hello.o
则依赖于 hello.c
。当运行 make
时,Make 会检查依赖关系,如果有需要重新编译的文件,它会自动调用相应的 GCC 命令来完成编译。
二、指令集汇总
在命令行中输入以下命令即可调试:
gdb [生成的可执行文件]
# 例如 gcc -o TEST hello.c ,这里TEST文件就是生产的可执行文件