makefile 实例_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > makefile 实例

makefile 实例

 2010/12/31 8:02:02  jyangzi5  http://jyangzi5.javaeye.com  我要评论(0)
  • 摘要:最近玩了下linux下c编程,觉得makefile对于项目管理有很大的优越性,在此跟大家分享,如有不足之处敬请指正。系统:RedHatEnterpriseLinux5编辑工具vi,vim(更好用,带有关键字高亮功能)我自己写了个helloworld的小例子,一个头文件:sayhello.h,两个源文件:sayhello.chello.c/*sayhello.h*/#ifndefSAY_HELLO//这块的宏只是为了条件编译,防止重复声明#defineSAY_HELLOvoidsayhello(
  • 标签:file Make 实例

最近玩了下linux下c编程,觉得makefile对于项目管理有很大的优越性,在此跟大家分享,如有不足之处敬请指正。

?

系统:Red Hat Enterprise Linux 5

编辑工具 vi,vim(更好用,带有关键字高亮功能)

我自己写了个hello world的小例子,一个头文件:sayhello.h,两个源文件:sayhello.c hello.c

?

/*sayhello.h*/

#ifndef SAY_HELLO????????? //这块的宏只是为了条件编译,防止重复声明
#define SAY_HELLO??

void sayhello ();?????????????? //声明sayhello()函数
#endif

?

/*sayhello.c*/????????

#include<stdio.h>
#include"sayhello.h"?????? //包含头文件

void sayhello()???????????????? //sayhello()函数的真正实现
{
printf("Hello World!\n我会时常想洋洋\n");?? //向控制台打印 Hello World!
}

?

?

/*hello.c*/

#include"sayhello.h"?????? //包含头文件
int main ()
{
sayhello();??????????????????????//sayhello()函数调用
return 0;

}

?

以上三个文件放于一个目录下,一般情况下,我们是这样做的:

?

切换到文件目录下

。。。。。。

[root@wuzhq hellotest]# ls
hello.c? sayhello.c? sayhello.h?
[root@wuzhq hellotest]# gcc -c sayhello.c??? //将sayHello.c编译为目标文件sayhello.o
[root@wuzhq hellotest]# gcc -c hello.c???????????//将hello.c编译为目标文件hello.o
[root@wuzhq hellotest]# gcc -o hello hello.o sayhello.o???? //将sayhello.o hello.o统一连接为可执行文件hello
[root@wuzhq hellotest]# ./hello

Hello World!

我会时常想洋洋

?

当然我们也可以这样来做:

[root@wuzhq hellotest]# ls
hello.c? sayhello.c? sayhello.h?
[root@wuzhq hellotest]# gcc -o hello hello.c sayhello.c?????? //一步到位,gcc将多个源文件编译为一个可执行文件有它自己内置的规则

?

?

大家试想,如果对于一个较大型的项目,跟多文件,如改动一处,我们是不是还是要一步步的重复敲命令,重复编译,重复连接?有没有跟好的解决办法呢?答案是肯定的,这时就体现出了makefile的优势

?

在源文件所在目录新建makefile,我自己命名为test,文件内容:

hello:hello.o sayhello.o
??????? gcc -o hello hello.o sayhello.o
hello.o:hello.c sayhello.h
??????? gcc -c hello.c
sayhello.o:sayhello.c sayhello.h
??????? gcc -c sayhello.c
[root@wuzhq hellotest]# ls?

hello.c? sayhello.c? sayhello.h? test

[root@wuzhq hellotest]# make -f test
gcc -c hello.c
gcc -c sayhello.c
gcc -o hello hello.o sayhello.o
[root@wuzhq hellotest]# ls
hello? hello.c? hello.o? sayhello.c? sayhello.h? sayhello.o? test

[root@wuzhq hellotest]# ./hello

Hello World!

我会时常想洋洋

?

看出它的优势了吧,每次对已有文件作改动时,改动之后只需执行make -f test就可以得到新的可执行文件hello

在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是:?
target:components?
TAB rule?
第一行表示的是依赖关系。第二行是规则。特别注意规则行一定要以tab键开头,我上次就犯过这样的错误

关于makefile编写详细的说明可参考http://www.360doc.com/content/10/0904/22/507289_51249378.shtml,我觉得是个不错的材料。

希望对大家有帮助。

?

?

?

?

?

?

?

?

?

发表评论
用户名: 匿名