前言
Linux下C语音使用的是gcc编译,学习全手动编译对理解编程过程十分有好处。
使用初步
- 创建
1 | $ vim a.c //创建一个a.c文件 |
- 编译
1 | $ cc a.c |
- 查看编译后文件
1 | $ ls //新产生了一个a.out的编译文件(可执行的文件颜色是不一样的) |
- 执行
1 | $ ./a.c //执行当前目录下的a.c文件 |
说明: gcc max.c hello.c 同时编译两个源文件-o main.out 表示输出文件名为main.out(默认为a.out)
多个源文件分而治之
用include 包含源文件max.c
头文件与函数定义分离
1 | gcc -c max.c -o max.o |
max.o不可执行,只有是有main()函数入口的才可执行,而max.o只是编译后形成的一个类似与01代码的机器码而已
编译时要将人写的英文程序编译成机器码是消耗CPU性能的,如果编译内容较多,耗时就会比较长,而如果将一些不常改动的函数提前编译成机器码即“.o”文件,则可以大量节约编译所需时间。
但是分离后不知道静态库文件(max.o)的类型还有参数,这时可以模仿系统#include “max.h”,创建max.h,而在max.h文件中只声明函数类型,参数类型等信息,即可告诉别人该函数该如何使用。
在编译时依然需要加上max.o等文件以前编译,否则会出现无法找到该函数的错误
Makefile的编写
创建Makefile
1 | vi makefile |
编写Makefile
递归编译,#表注释,gcc命令前必须用Tab键,不能用空格,不然会报错
使用make命令执行,若修改后再次执行,则之前执行过生成的文件不会再被执行。
参考慕课网学习教程:Linux C语言编程基本原理与实践