Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1589245
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: C/C++

2010-07-09 14:52:37

作者: 江淼
Blog: http://blog.csdn.net/jiangfriend
时间: 2007-6-27 18:28

makefile对于溺于IDE下的朋友们一定接触的不多,因为IDE把建立makefile的任务一手包办了,但常期以往沉浸于IDE的溺爱是对发展非 常不利的,特别是在unix下和makefile打交道是更为普遍,所有学会写makefile是非常有必要的。

在IDE下,系统之所以 能井然有序的对众多源代码进行编译和链接,是因为IDE很明确的告诉系统先做什么而后做什么。而makefile就是一个传播这些信息媒介,而我们现在的 目标抛离IDE的怀怉,返璞归真。

这里是官方make参考文档中makefile一章,关于makefile的方方面面可谓是面面惧到, 非常适合看到E文不头疼的朋友和即使头疼也要看的朋友

准备工具和文件
hello.c
#include
int main(int argc,char* argv[])
{
  printf("hello world\n");
  return 0;
}
当hello.c输入完成后,我们要对hello.c进行编译,需要执行
gcc hello.c

初任务:建立一个makefile,使用make代替以上的过程。

# 最简单的makefile
hello: hello.c
    gcc hello.c
#注意 hello前与gcc前的是[TAB]而不是空格
当makefile建立完成后放至hello.c所在的文件夹,执行 make,看看发现了什么。
make执行了gcc hello.c成功的完成了编译
我们回首分析那个 makefile发现执行单元由3个部分组成
<目标名称>:<需要的文件>
             <命令>
我们对makefile进行改写,以更能容易描述这三个单元
#次简单的makefile
hello: hello.o
    gcc hello.o -o hello
hello.o: hello.c
    gcc -c hello.c -o hello.o
删除目录下的hello.o后再执行make后发现了什么?
系统执行了
gcc -c hello.c -o hello.o
gcc hello.o -o hello

对比makefile我们很容易发现hello的建立过程为
hello <- hello.o <- hello.c


任务二:关联多个源文件的makefile

对单个文件大家可能没有体会到优势,那么我们新引入一个func.c 与 func.h 文件并修改hello.c
/*hello.c*/
#include "func.h"
int main(int argc,char* argv[])
{
    func();
    return 0;
}


/*func.c*/
#include "func.h"
void func(void)
{
printf("hello world\n");
}


/*func.h*/
#ifndef _FUNC_H
#define _FUNC_H

#include

void func(void);
#endif
并修改相应的makefile为
#任务二的 makefile
hello: hello.o func.o
    gcc hello.o func.o -o hello
hello.o: hello.c
    gcc -c hello.c -o hello.o
func.o: func.c func.h
    gcc -c func.c -o func.o
运行make后输出
gcc -c hello.c -o hello.o
gcc -c func.c -o func.o
gcc hello.o func.o -o hello
执行过程为
hello<-hello.o<-hello.c
    ^--func.o<-hello.c

通过任务一和任务二,我相信大家一对makefile最最基本的规则有了个明确的了解。不过这仅仅只是序幕。下一章我们将使用make的特性开始对 makefile修改,以简化和自动化我们书写代码的过程。

makefile相比较c来讲还是相当的简单的
阅读(883) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~