`
haiouc
  • 浏览: 115371 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个最简单的Makefile例子(转)

阅读更多
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

===============================================
   本来早就应该学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写法详解,一步一步写一个实用的makefile

    目的:编写一个实际可用的makefile,能自动编译当前目录下所有.c源文件,并且任何.c、.h或依赖的源文件被修改后,能自动重编那些改动了的源文件,未改动的不编译。 二 要达到这个目的,用到的技术有: 1-使用...

    Ubuntu下最简单的Cmake编译C和C++程序的例子

    Ubuntu下用cmake编译C/C++的例子,自动生成makefile,执行make命令直接生成运行程序

    4、make工具使用(makefile) – 零基础 到 通用makefile,看这一篇就够了!

    目录四、make工具使用(makefile)1、Makefile2、Makefile基本规则3、最简单的Makefile例子4、make是如何工作的5、Makefile使用伪目标6、makefile中使用变量7、make自动推导8、Makefile中常见函数9、多级目录Makefile...

    Ubuntu下最简单的Cmake编译多个C和C++工程的例子

    Ubuntu下用cmake编译多个C和C++工程的例子,自动生成makefile,执行make命令直接生成运行程序

    Windows环境下32位汇编语言程序设计_随书光盘

    最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - ...

    simple-webserver:一个简单的C语言http Web服务器-受IBM启发

    例子运行Makefile make 您可以这样运行服务器: ./server [port] [location to serve pages from] [& - to run in background] 例如,要在端口8080上运行它,您需要执行以下操作: ./server 8080 ./ &

    LuaBind 源码 (Lua增强库)

    让我们开始一个简单的例子.考虑下面的C++类: class testclass { public: testclass(const std::string& s): m_string(s) {} void print_string() { std::cout ; } private: std::string m_string; }; 为了注册这个...

    devkitadv-GBA开发工具

    我们就拿里面的一个具有代表性的例子编绎吧 functional_sample 在编绎之前,你必须重起你的机器,因为刚才我们修改了 autoexec.bat 而设置此时需要生效才行。(当然也有其它办法不必重起就生效,说来话长了) 好,...

    c++0x多线程处理PPM图像文件简单示例

    github中的一个示例代码,演示c++11的thread库去创建多线程的例子,这里是读取一个PPM文件,然后利用多线程去处理每个像素,使其中和污点,最后将处理后的PPM文件输出。原来的代码没有makefile,我给它加了makefile...

    Tinyxml 源代码(VC6 & VS2005)

    在你的项目中,在tinyxml.h的第一行添加"#define TIXML_USE_STL"应该是最简单的。 UTF-8 TinyXML支持UTF-8,所以可以处理任何语言的XML文件,而且TinyXML也支持“legacy模式”——一种在支持UTF-8之前使用的编码...

    SCON工具源码

    像很多编程书籍那样,在这里我们也通过一个简单的 helloscons 例子来说明如何使用 SCons。例子 helloscons 包含两个文件 : $ ls helloscons helloscons.c SConstruct 其中 helloscons.c 是程序的源文件,...

    自己动手写操作系统(含源代码).part2

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    自己动手写操作系统(含源代码).part1

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    火柴棍:该项目的目标是创建一个可以播放的程序。 基本版本必须生成带有n条火柴线(1 &lt;n &lt;100)的游戏板,并具有简单的界面,以便用户可以在计算机上玩游戏

    该项目基于一个非常著名的基于火柴的游戏。 有一定数量的火柴线。 两位选手轮流玩; 每个玩家可以在同一条线上拿一根或几根火柴。 输家是最后一根火柴的人。 该项目的目标是创建一个可以使用的程序。 基本版本必须...

    cmake 基础教程 多平台工程构建工具

    成为一个独立的开放源代码项目。项目的诞生时间是2001年。其官方网站是www.cmake.org,可以通 过访问官方网站获得更多关于cmake的信息。cmake的流行其实要归功于KDE4的开发(似乎跟当年的 svn一样,KDE将代码仓库从...

    JNI技术手册 c/c++调用java

    一 先制作一个系统中有的DLL文件(cpp给出的sdk接口) 4 二 JNI 7 1、 编写java文件 7 2、 生成.h头文件 8 3、 用c/cpp实现这个头文件 9 三 测试 10 四 最后补充 11 III. java c/cpp互相调用实例(姊妹篇之二)——c...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    代码语法错误分析工具pclint8.0

    2.通常一个VC项目中包含多个C或C++文件,有时需要同时对这一系列的文件进行lint检查,我们可以通过配置一个pclint_project来达到目的。 和前面第一步中的方法基本一样,不过这里我们需要用到unix中的find等命令来...

    Tcl_TK编程权威指南pdf

    其实,你可以通过添加一个Tcl解释器,来将自己的应用程序组织成一组操作原语,并使用这些原语来构造最符合用户需求的脚本程序。这样还可以允许其他的程序通过编程来控制你的应用程序,以使套装应用程序能够很好地在...

    google-perftools 源码 (一款针对 C/C++ 程序的性能分析工具)

    该程序是一个简单的例子,文中有两处耗时的无用操作,并且二者间有一定的调用关系。 清单 1. 示例程序 void consumeSomeCPUTime1(int input){ int i = 0; input++; while(i++ ){ i--; i++; i--; i++;...

Global site tag (gtag.js) - Google Analytics