编译的步骤
编译四步骤:预处理 编译 汇编 链接
预处理
处理所有以#号开头的文件
头文件(展开) 宏定义(替换) 条件编译(ifdefine)
gcc -E hello.c -o hello.i
编译
把C转换成汇编,且进行语法检查
gcc -S hello.i -o hello.s
汇编
把汇编代码转换成二进制
gcc -c hello.s -o hello.o
链接
链接代码用到的库文件
gcc hello.o -o hello
动态编译
需要安装对应的环境,只编译文件本身,文件较小(gcc默认动态)
编译动态库
gcc -fPIC -shared f1.c f2.c -o libxxx.so
gcc hello.c -o hello -L . -l xxx
将编译出的动态库移动到usr/lib中
静态编译
不依赖环境,文件本身和库文件一起编译,文件较大
gcc hello.c -o hello -static
###编译静态库
gcc -c xxx.c xxx.c(生成xxx.o xxx.o)
ar -crv libmylib.a xxx.o xxx.o(做成静态库)
static表示静态编译 -L表示静态库编译 -l表示库名(不含lib)
make和Makefile
代码示例:
Target=hello#变量
Object=hello.o f1.o f2.o#变量
$(Target):$(Object)#一般格式
gcc $(Object) -o $(Target)
#makefile隐含规则:当Target中有*.o文件时会自动搜寻*.c文件编译成*.o
.PHONY:clean#伪代码
clean:
rm *.o $(Target)