在ubuntu系统下用Makefile方式编程主程序
Makefile 介绍
make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。
首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:
1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。
Makefile的规则
在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。
target… : prerequisites …
command
…
…
-------------------------------------------------------------------------------
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
编写main1.c,sub1.h,sun1.c
1.创建函数
先把函数赋值注释掉
#include "sub1.h"
int main(void){
int a;
int b;
//a=2;
//b=5;
printf("%.2f\n",x2x(a,b));
return 0;
}
创建makefile文件
我这里使用的是vi makefile
main1:sub1.o main1.o
gcc main1.c sub1.o -o main1
sub1.o:sub1.c
gcc -c sub1.c -o sub1.o
clean:
rm *.o
输入make命令进行调用并执行
这里输出的是-nan,值得注意的是在写makefile文件的时候最好用vim而不是vi,使用vi就算手动编写,在使用make命令的时候也会报错例如:makefile:2: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
改掉注释再次运行make指令就有结果了
参考文章:
1.Ubuntu16.04下C语言的编译及makefile的应用
2.Makefile教程