原文地址:http://hi.baidu.com/hellosim/blog/item/42e78341b40c3e8db2b7dce3.html
转载请注明出处

1.hello.c

#include <stdio.h>
int main()
{
    printf("Hello World!\n");
    return 0;
}

2.Makefile

hello : hello.o
    cc -o hello hello.o

hello.o : hello.c
    cc -c hello.c

clean : 
    rm hello.o

说明:cc -o hello hello.o前面是一个tab的空格

3.执行make,产生可执行文件hello

输出如下:
cc -c hello.c
cc -o hello hello.o

4.执行make clean,删除产生的中间文件hello.o

输出如下:
rm hello.o

另转:http://hi.baidu.com/s_rlzheng/blog/item/4bc10a06892e217d030881ef.html

本来早就应该学Makefile了,只是我偷懒,现在才学呵呵^_^makefile的好处叫我说,老实说我也说不出什么之所以然来,但是可以肯定的是它是linux平台的软件工程师都要必备的知识^_^

一、程序的编译及链接

我们编译程序,无非是想要得到一个可执行文件,而这个过程则是经过这两步:

***.c->编译->***.o->链接->可执行文件。即.c经过编译得到.o文件,.o文件是一个中间文件,再对这些中间文件进行链接最终可得到可执行文件。

二、Makefile的规则

首先,来看一看Makefile的书写规则:

target ... : prerequisites ...

command

...

...

target也就是一个目标文件,可以是.o文件,也可以是执行文件,还可以是一个标签(Label)。

prerequisites就是,要生成那个target所需要的文件或是目标。

command也就是make需要执行的命令(任意的Shell命令)。这里要注意的是在命令前面要加上一个tab键,不是空格,是按一个tab键按出来的空格。

这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比 target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则,也就是Makefile中最核心的内容。这是Makefile的主线和核心,但要写好一个Makefile还得继续努力。

三、一个最简单的Makefile例子

如有一个工程,含有3个头文件及四个c文件,那为了生成所需的可执行文件,这时的Makefile可以这样写:

test:main.o t1.o t2.o t3.o

gcc –o test main.o t1.o t2.o t3.o

main.o:main.c

gcc –c main.c

t1.o:t1.c t1.h

gcc –c t1.c

t2.o:t2.c t2.h

gcc –c t2.c

t3.o:t3.c t3.h

gcc –c t3.c

clean:

rm test main.o t1.o t2.o t3.o

到这里一个最简单的makefile就写好了,把它的名字保存为Makefile就可以了,这时你只要在终端敲一下make,它就自动帮你编译链接了^_^如果敲入make clean,它将删掉那些中间文件及可执行文件。

一个最简单的Makefile例子(转)相关推荐

  1. 一个最简单的Lucene例子

    Lucene的使用,简单来说可以划分为两种类型,一是建立索引,二是搜索内容. 一.建立索引的五个基础类 Document, Field, IndexWriter, Analyzer, Director ...

  2. java quartz实例_一个非常简单的quartz例子

    在quartz中一个作业实例必须实现org.quartz.Job接口 如: package com.unicom.gdnum.jobs; import java.util.*; import org. ...

  3. linux 一个超简单的makefile

    2019独角兽企业重金招聘Python工程师标准>>> makefile 自动化变量: $@ : 规则的目标文件名 例如:main:main.o test.o g++ -Wall - ...

  4. 一个最简单的bootstrap例子

    把下面这段html代码拷贝进index.html: <!DOCTYPE HTML> <html lang="en"><head><scri ...

  5. mvc登录实例 mysql_spring mvc + mybatis + mysql 调整的一个简单的登录例子

    spring mvc + mybatis + mysql 整合的一个简单的登录例子 今天用spring跟mybatis整合写了一个简单的登录例子,第一次整合,给自己做个笔记,可能注释写的有点少,做的不 ...

  6. 收了100元辛苦费,写了一个最简单的C#ASP.NET的3层架构例子代码,源码是通过代码生成器生成的【写程序的效率神奇的高】...

    为什么80%的码农都做不了架构师?>>>    有一个客户购买了代码生成器,虽然我把很多基础类库的源码及配套的源码都发给他了,但是他由于时间忙的原因,还是没自己仔细看,而是希望我以他 ...

  7. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子

    我们用个最简单的Servlet例子来解说一下Servlet简单配置以及Servlet类实现类的写法. 第一,我们新建一个Dynamic Web Project,起名Servlet 点击NEXT,设置D ...

  8. boost::math模块使用 non_finite_num facet 的一个非常简单的例子

    boost::math模块使用 non_finite_num facet 的一个非常简单的例子 实现功能 C++实现代码 实现功能 boost::math模块使用 non_finite_num fac ...

  9. boost::math模块使用词法转换的一个非常简单的例子的测试程序

    boost::math模块使用词法转换的一个非常简单的例子的测试程序 实现功能 C++实现代码 实现功能 boost::math模块使用词法转换的一个非常简单的例子的测试程序 C++实现代码 #inc ...

最新文章

  1. html5 点击事件委托,jquery事件委托
  2. 阿里云mysql服务器太贵_阿里云数据库,跟自己在服务器安装的有什么区别?有人说安装很简单,那为什么要花钱买?...
  3. 带中文索引的ListView 仿微信联系人列表
  4. select,poll,epoll的归纳总结区分
  5. python求均值标准差不用numpy_【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印...
  6. Tarjan点的双联通(寻找割点)
  7. 实例讲解遗传算法——基于遗传算法的自动组卷系统【实践篇】
  8. ArcMap|地理探测器(geoDetector)前在ArcGIS中的处理
  9. 数据库设计—图书管理数据库系统设计
  10. HUAWEI AC+AP设备配置
  11. codevs 5294 挖地雷
  12. 单例模式(Singleton)分析
  13. Google Earth Engine简介
  14. GIS(地理信息系统)近年来应用及发展状态
  15. 使用OneDNS完美解决办公网络优化问题
  16. [Git[ 解决 git branch -M main error: refname refs/heads/master not found
  17. 机器视觉系统——照明
  18. 百度地图之标注物聚合
  19. 微信小程序image图片自适应宽度比例显示的方法
  20. 「wps教程」Word里的大神器隐藏技能

热门文章

  1. maven servlet配置_第一个Servlet配置
  2. python类成员变量_Python 类变量和成员变量
  3. jsp文件能转换html吗,html怎么转换成jsp
  4. Ubantu键盘快捷键
  5. 工业级PoE交换机的分类知识详解
  6. PoE交换机如何才能稳定连接和安全使用?
  7. 选择安防交换机时需要避免哪些误区呢?
  8. 【渝粤教育】国家开放大学2018年秋季 8038-22T实用管理基础 参考试题
  9. 【渝粤教育】国家开放大学2018年春季 0014-22T秘书学(一) 参考试题
  10. 【渝粤题库】陕西师范大学200671 电子技术基础