这两天写程序感觉一个一个编译程序还是挺麻烦,看了看Makefile的编写,同时参考了一下网友的博客,如果看到类似的别喷我啊,哈哈,所以说只是很简单的、入门级的Makefile编写,至于Makefile的功能什么的我就不介绍了,Google、百度吧。如果你是高手那就指正指正,那我就谢谢你了,哈哈。好吧咱们开始吧。
主要内容:
1.编写一个简单的应用程序的Makefile;
2.编写一个简单的驱动程序的Makefile。
所用环境:
1.linux主机:虚拟机中装的32位fedora14;
2.编译驱动的linux源码为:linux3.0.8
应用程序Makefile:
先把应用程序贴出来吧,很简单就打印一句话,但是是分为3个文件完成的,这里只是为了说明问题,代码如下:
//这是名为main的.c文件
#include "mytest.h"
int main(int argc,char **argv)
{
myprintf("Hello world!");
}
//这是mytest的.h文件
#ifndef _MYTEST_H_
#define _MYTEST_H_
#include <stdio.h>
void myprintf(char *str);
#endif
//这是mytest的.c文件
#include "mytest.h"
void myprintf(char *str)
{
printf("The string is: %s\n",str);
}
上面的程序你可以这样编译,过程如下:
gcc -c main.c
gcc -c mytest.c
gcc -o main main.o mytest.o
这种方式当然可以编译出来,但是如果你的文件很多,比如说有mytest1.c、mytest2.c、....mytest100.c这么多个文件组成的一个比较大的程序,你在这样编译那就不是很轻松了,而且在调试的时候不是说一次编译就能搞定,而是需要很多次的。这就是Makefile出现的原因。那怎么编写Makefile文件呢?我先把为 上面程序编写的Makefile贴出来啊,接下来再做详细介绍一下。
main: main.o mytest.o
gcc -o main main.o mytest.o
main.o: main.c mytest.h
gcc -c main.c
mytest.o: mytest.c mytest.h
gcc -c mytest.c
clean:
rm -r main *.o
上面的这就是编写的Makefile了,有Makefile后,你仅仅需要make一下就可以编译整个程序了,而且当你仅仅改变其中的一个源文件时,编译时就仅仅编译改变的文件,而不需要编译其他的。好吧,下边就介绍介绍怎么编写吧。规则如下:
1.Makefile中“#”用做注释,相当于写c文件中的“//”;
2.Makefile中的依赖关系的格式为:
target: components
TAB rule
所谓依赖关系就是要生成目标文件需要那些文件,就比如说你需要写程序时需要那个头文件一样。第一行中的target表示目标,后面的component表示所依赖的文件,就比如说前面贴出来的Makefile中的:main: main.o mytest.o 中,main就要生成的目标文件了,依赖文件就是main.o mytest.o。第二行表示的编译的规则,就比如说编译时怎么优化等,在上面贴出来的Makefile中的第二行:gcc -o main main.o mytest.o就是编译规则了,也就是上面的“rule”了,TAB就是Tab键了,这里一定注意一下啊,一定要是Tab键,否则make时出错。
本来要一篇博客写完的,但好像有点长了,那就再续一篇吧,下篇介绍驱动的Makefile编写,下篇见喽!