linux下c语言编程
linux 下c语言编程
工具
GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划 的关键部分,亦是自由的 类Unix 及苹果计算机 Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。在ubuntu等操作系统中编译安装大多数开源项目几乎都会用到gcc。
编译
|
|
简单的编译: 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语言编程。有空得继续深入了