文章目录
  1. 1. linux 下c语言编程
    1. 1.1. 工具
    2. 1.2. 编译
    3. 1.3. 多个程序文件的编译
    4. 1.4. makefile
    5. 1.5. 调试

linux 下c语言编程

工具

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划 的关键部分,亦是自由的 类Unix 及苹果计算机 Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。在ubuntu等操作系统中编译安装大多数开源项目几乎都会用到gcc。

编译

1
2
3
4
5
6
7
//hellp.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}

简单的编译: gcc hello.c -o hello
gcc 编译器就会为我们生成一个 hello 的可执行文件,执行./hello 就可以看到程序的输出结果了。命令行中 gcc 表示我们是用 gcc 来编译我们的源程序,-o 选项表示我们要求编译器 给我们输出的可执行文件名为 hello 而 hello.c 是我们的源程序文件。
实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

gcc还有很多参数:
-o 要求输出的可执行文件名。
-c 要求编译器输出目标代码,而不必要输出可执行文件。
-g 要求编译器在编译的时候提供我们以后对程序进行调试的信息。

多个程序文件的编译

比如hello.c include了一些头,包含在hello1.h和hello2.h中,hello1.c和hello2.c也包含了这些头,需要编译多个文件
gcc -c hello.c
gcc -c hello1.c
gcc -c hello2.c
gcc hello.o hello1.o hello2.o -o hello

虽然这些命令可以使用shell脚本完成,但是大型的项目中会有很多源程序,不可能有一个改动就重新一个个编译。
因此就有了makefile,makefile带来的好处就是自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

makefile

在 Makefile 中也#开始的行都是注释行.Makefile 中 最重要的是描述文件的依赖关系的说明.一般的格式是:
target: prerequisites
TAB command
第一行表示的是依赖关系,第二行是规则。

于是 hello的生成可以这么写

hello:hello.o hello1.o hello2.o
gcc -o hello hello.o hello1.o hello2.o
hello.o:hello.c hello1.h hello2.h
gcc -c hello.c
hello1.o:hello1.c hello1.h
gcc -c hello1.c
hello2.o:hello2.c hello2.h
gcc -c hello2.c

Makefile 有三个非常有用的变量.分别是$@,$^,$<代表的意义分别是: $@–目标文件,$^–所有的依赖文件,$<–第一个依赖文件。
所以上面的可以写成
hello:hello.o hello1.o hello2.o
gcc -o $@ $^
.c.o:
gcc -c $<

调试

gdb工具,暂时没用到,先不看了

简单地了解下linux下C语言编程。有空得继续深入了

文章目录
  1. 1. linux 下c语言编程
    1. 1.1. 工具
    2. 1.2. 编译
    3. 1.3. 多个程序文件的编译
    4. 1.4. makefile
    5. 1.5. 调试