Linux下多个.c⽂件的编译和Makefile⽂件
在编程的时候,我们可以把⼀个完整程序的每个函数分离出来,写成.c⽂件,最后再⼀起编译和链接。这样有利于程序功能模块化,也⽅便检查代码错误。
.h⽂件:⾥⾯编辑该程序需要引⽤的头⽂件。
#ifndef  /#define / #endif : 防⽌该头⽂件被重复引⽤。
整体⽤法:
#ifndef  A_H            //如果没有a.h⽂件,#define A_H。如果有,结束定义
#define  A_H            //定义a.h⽂件
定义a.h需要的头⽂件
#endif                //结束定义部分
例⼦:
⼀个.h⽂件的书写格式。
#ifndef    A_H
#define  A_H
定义程序所需的⼀些头⽂件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
linux下gcc编译的四个步骤#endif
保存退出。
其实在编写⼩程序的时候也可以不⽤#ifndef  /#define / #endif,但是⽤它更安全,不易出错。
.c⽂件的书写格式
在写每个函数之前要加载头⽂件,如果是.h⽂件,就需要写#include”a.h”。
例如:引⽤之前的a.h⽂件。
add.c
#include”a.h”
int add(int a,intb)
{
return a+b;
}
保存退出。
程序编辑完成之后,需要编译链接。
我们可以⽤gcc编译每个.c⽂件。如果有三个.c⽂件a.c、b.c、c.c,编译⽅法如下:
gcc  a.c  –o  a.o                    //将三个.c⽂件编译成.o⽂件
gcc  b.c  -o  b.o
gcc  c.c  -o  c.o
gcc  a.o  b.o  c.o  –o  all        //将三个.o⽂件编译成⼀个可执⾏⽂件
./all                            //执⾏程序
例如:
test.h
add.c
main.c
编译:
执⾏:
如果我们有很多个.c⽂件,这个⽅法就不太好了,这时,我们提出Makefile⽂件。
Makefile:⾃动编译。先将每个.c⽂件的编译过程提前写在Makefile⽂件中,在运⾏程序时,系统直接
⽤make命令使⽂件⾃动编译,提⾼效率。
Makefile⽂件的书写格式:
vim  Makefile
⽂件类型:由哪个⽂件得到
得到过程
例如:
main:main.o                    //可执⾏⽂件main是由⽬标⽂件main.o得到。
gcc  main.o  –o  main        //得到过程是将main.o编译成main⽂件。
main.o:main.c
gcc  -c  main.c  -o  main.o
在Makefile⽂件中⼀定要将每⼀个.c⽂件按执⾏顺序先编译成.o⽂件,再按顺序将.o⽂件编译成可执⾏⽂件。
每次编译过后会产⽣很多的.o⽂件,对于程序运⾏没什么太⼤意义,反⽽会占内存,所以我们也可以在Makefile⽂件中添加清除命令(clean),如:
.PHONY:clean
clean:                删除所有⽂件类型为.o的⽂件
rm  –rf  *.o
⼀些⽂件也可⽤下⾯符号表⽰:
$@: 代表规则⾥⾯的⽬标⽂件。
$<:代表规则当中的第⼀个依赖⽂件。
%.c:%.o  所有.c⽂件全部编译成.o⽂件
.PHONY:clean
如果有.PHONY:clean,外⾯也有clean⽂件,执⾏make clean时,⾥⾯的.o⽂件会被删除⽽外⾯的clean⽂件还在。确保了外⾯clean⽂件的安全性。如果没有.PHONY:clean 语句,外⾯也没有clean⽂
件时,在执⾏make clean也会删除.o⽂件,如果外⾯有clean,则会报错。
PHONY:⽬标并⾮实际的⽂件名,只是显⽰在请求时执⾏命令的名字。有两种理由需要使⽤PHONY⽬标:避免和⽂件名冲突,改善性能。例如:
vim Makefile
编译和执⾏(make:编译,  ./all:执⾏):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。