一、首先,看一下最简单的C文件
//hello.c文件
#include <stdio.h> void main()
{
printf("hello world\n");
}
为hello.c编写makefile文件,这里用gcc编译

$ vi Makefile

hello:hello.c
  gcc -o hello hello.c
从中可以看出,最简单的makefile文件只需要两行,我们分别来看
第1行:hello是要生成的文件,hello.c是编译需要的源文件,中间以:分隔
第2行:是具体的编译命令
二、我们还可以用gcc先把hello.c编译成机器语言,以.o结尾,最后再将各个文件进行链接生成二进制文件
   上面的makefile文件则可以写成这样:
hello:hello.o
gcc -o hello hello.o
hello.o:hello.c
gcc -c hello.c
从上面的代码中可以看出,最后编译的hello是由hello.o最后生成的
先看第3,4行:第3行,hello.c先编译生成hello.o,第4行,是生成hello.o具体的命令
再看第1,2行:第1行,二进制文件hello需要hello.o,第2行,是生成hello具体的命令
 
是不是很easy.
 
三、如果有多个文件需要进行链接,只需生成.o文件,最后链接生成最终文件
如:有file1.h,file1.c, file2.h, file2.c, main.c五个文件

makefile文件如下:

main:main.o file1.o file2.o
gcc -o main main.o file1.o file2.o
main.o:main.c file1.h file2.h
gcc -c main.c
file1.o:file1.h file1.c
gcc -c file1.c
file2.o:file2.h file2.c
gcc -c file2.c
从上面代码可以看出,需要先编译出file1.o,file2.o,main.o文件,最后链接生成最终的main文件,大功告成。
 
Attention: A tab is needed before the command  like `gcc -c main.c` or will be terrible!!

最新文章

  1. Struts2 源码分析——调结者(Dispatcher)之action请求
  2. 修改安卓串口蓝牙app问题记录
  3. datetime
  4. 实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。
  5. java 切换
  6. const和readonly差别
  7. mysql 查询某字段里含有(或者不含)某字符的所有记录方法(转)
  8. zoj3433(贪心+优先队列)
  9. JSTL标签库--核心标签库
  10. PL SQL Developer报错框乱码
  11. JavaWeb之JSP技术总结
  12. java内存模型1
  13. Mybatis-no getter for property named &#39;col_name&#39; in &#39;class com.xxx.onebean&#39;
  14. php怎么返回json格式的数据
  15. python re模块findall使用
  16. javascript基础修炼(9)——MVVM中双向数据绑定的基本原理
  17. C++隐藏任务栏图标
  18. ORM框架(ITDOS实战源码)
  19. python之路---12 生成器 推导式
  20. @RequestMapping、@Responsebody、@RequestBody和@PathVariable详解(转)

热门文章

  1. 转载ASP.NET MVC 和ASP.NET Web Form简单区别
  2. C#- 将秒数转化成任意时间格式
  3. 网页标签图片如何保存&amp;下载?
  4. Asp.Net事务和异常处理:
  5. Ant-常用命令(笔记二)
  6. mysql 开启记录慢查询记录
  7. spring3.2.2+mybatis3.2.3+c3p0项目整合
  8. Xcode中c++&amp;Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
  9. iOS8 CLLocationManager 、CLGeocoder获取地理位置
  10. [原创]oracle 顺序号生成函数。仿Sequence