`

Makefile的编写

阅读更多

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

Makefile 的编写

假设我们有这样一个程序由五个文件组成,源代码如下:

/* main.c */

#include "mytool1.h"

#include "mytool2.h"

int main(int argc,char **argv)

{

mytool1_print("hello mytool1!");

mytool2_print("hello mytool2!");

return 0;

}

 

/* mytool1.h */

#ifndef _MYTOOL_1_H

#define _MYTOOL_1_H

void mytool1_print(char *print_str);

#endif

 

/* mytool1.c */

#include "mytool1.h"

#include <stdio.h>

void mytool1_print(char *print_str)

{

printf("This is mytool1 print %s\n",print_str);

return 0;

}

 

/* mytool2.h */

#ifndef _MYTOOL_2_H

#define _MYTOOL_2_H

void mytool2_print(char *print_str);

#endif

 

/* mytool2.c */

#include "mytool2.h"

#include <stdio.h>

void mytool2_print(char *print_str)

{

printf("This is mytool2 print %s\n",print_str);

return 0;

}

 

当然由于这个程序是很短的, 我们可以这样来编译

gcc -c main.c

gcc -c mytool1.c

gcc -c mytool2.c

gcc -o main main.o mytool1.o mytool2.o

 

当然,我们也可以写一个shell 脚本,不过聪明的程序员开发了一个很好的工具来做这件事情,那就是make ,首先编写一个很重要的文件Makefile 文件,对于上面的那个程序来说, 可能的一个 Makefile 的文件是:

# 这是上面那个程序的 Makefile 文件

main:main.o mytool1.o mytool2.o

gcc -o main main.o mytool1.o mytool2.o

main.o:main.c mytool1.h mytool2.h

gcc -c main.c

mytool1.o:mytool1.c mytool1.h

gcc -c mytool1.c

mytool2.o:mytool2.c mytool2.h

gcc -c mytool2.c

 

 

 

有了这个 Makefile 文件, 不论我们什么时候修改了源程序当中的文件, 我们只要执行

make 命令, 我们的编译器都只会去编译和我们修改的文件有关的文件, 其它的文件她连理

都不想去理的。

下面我们学习 Makefile 是如何编写的.

Makefile 中由# 开始的行都是注释行。Makefile 中最重要的是描述文件的依赖关系

的说明。一般的格式是:

 

target: components

TAB rule

 

第一行表示的是依赖关系。第二行是规则.

比如说我们上面的那个 Makefile 文件的第二行

main:main.o mytool1.o mytool2.o

表 示 我 们 的 目 标 (target)main 的 依 赖 对 象 (components) main.o mytool1.o

mytool2.o 当依赖的对象在目标修改后修改的话, 就要去执行规则一行所指定的命令, 就象 我们的上面那个 Makefile 第三行所说的一样要执行

gcc -o main main.o mytool1.o mytool2.o

注意规则一行中的 TAB 表示那里是一个 TAB

Makefile 有三个非常有用的变量, 分别是$@$^$< 。代表的意义分别是:

$@-- 目标文件 ,

$^-- 所有的依赖文件 ,

$<-- 第一个依赖文件。

如果我们使用上面三个变量, 那么我们可以简化我们的 Makefile 文件为:

# 这是简化后的 Makefile

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

main.o:main.c mytool1.h mytool2.h

gcc -c $<

mytool1.o:mytool1.c mytool1.h

gcc -c $<

mytool2.o:mytool2.c mytool2.h

gcc -c $<

 

经过简化后我们的 Makefile 是简单了一点, 不过人们有时候还想简单一点。这里我们

学习一个 Makefile 的缺省规则

..c.o:

gcc -c $<

这个规则表示所有的 .o 文件都是依赖与相应的 .c 文件的 。例如 mytool.o 依赖于

mytool.c, 这样 Makefile 还可以变为:

# 这是再一次简化后的 Makefile

main:main.o mytool1.o mytool2.o

gcc -o $@ $^

..c.o:

gcc -c $<

 

好了, 我们的 Makefile 也差不多了。如果想知道更多的关于 Makefile 规则可以查看

相应的文档.

分享到:
评论

相关推荐

    Windows 下的 Makefile 编写(一)Makefile的基本规则

    ### Windows 下的 Makefile 编写(一)Makefile 的基本规则 #### 一、Makefile 概述 Makefile 是一种广泛应用于软件构建过程中的自动化脚本文件,主要用于描述项目构建过程中的依赖关系和构建步骤。对于习惯于集成...

    Makefile 编写详解.rar

    Makefile是Unix/Linux环境下自动...通过阅读《Makefile 编写详解.pdf》这份资料,你可以更深入地了解如何编写高效的Makefile,优化你的开发流程。学习并熟练运用Makefile,是成为一名专业IT开发者不可或缺的技能之一。

    makefile编写及实例

    `Makefile` 的编写是项目构建自动化的核心,它定义了一系列规则,告诉操作系统如何构建、编译、测试软件。下面将深入探讨 `Makefile` 的编写及其相关知识点。 首先,我们要理解 `Makefile` 的基本结构。`Makefile` ...

    linux下驱动程序模块编程多文件makefile编写示例

    本示例主要探讨的是如何为Linux驱动程序模块编写一个多文件的Makefile,以便于编译和加载。 首先,我们需要理解Makefile的基本结构和规则。Makefile由一系列的目标(target)和依赖(dependency)组成,目标通常是...

    makefile编写

    makefile编写

    makefile编写,学习linux c编程的必备

    在Linux环境下进行C编程时,掌握`makefile`的编写至关重要,因为它是构建和管理项目的关键。`makefile`是一种自动化编译工具,它定义了项目中源文件的编译顺序、依赖关系以及各种编译规则,极大地提升了开发效率。在...

    makefile编写方法.docx

    Makefile 编写方法 Makefile 是一个非常重要的文件,在 Unix 下的软件编译中 plays a crucial role。它定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂...

    Makefile编写技术细节

    ### Makefile编写技术细节 #### 一、Makefile的重要性及概念 Makefile是软件开发过程中不可或缺的一部分,尤其在Unix/Linux环境中。它不仅能够自动化管理项目的编译过程,还能提高开发效率,确保项目的可维护性和...

    多层次makefile编写例程

    此代码是多层makefile编写的简单例程。

    非常完善的makefile的编写指导说明

    这份“非常完善的makefile编写指导说明”旨在帮助开发者掌握makefile的编写技巧,使得编译工作更加高效、自动化。 首先,`makefile`的核心在于规则(rules),每条规则都包含了目标(target)和依赖项...

    Linux下C语言的makefile编写

    ### Linux下C语言的makefile编写 #### 一、引言 在Linux环境下,makefile是一种用于自动化构建软件项目的脚本文件。对于大型项目来说,手动管理编译过程既耗时又容易出错。通过makefile,开发者可以定义一套规则,...

    linux 下Makefile 编写规则

    Linux 下 Makefile 编写规则 Makefile 是一个帮助程序员构建项目的工具,它按照项目的需求个性化的定义自己的构建过程。在 Linux 系统下,Makefile 是一个非常重要的文件,它可以帮助开发者自动化地构建项目。但是...

    Makefile编写指导.doc

    【Makefile编写指导】 在软件开发中,尤其是Unix或Linux环境下,Makefile是一个至关重要的工具,它定义了项目中各种文件的编译规则和依赖关系,使得自动化编译成为可能。Windows开发环境中,IDE通常会自动处理这些...

    Makefile编写

    ### Makefile编写详解 #### 一、Makefile概念与作用 **Makefile** 是一种用于自动化构建过程的脚本文件,广泛应用于软件工程领域。它主要用于定义如何编译和链接程序,通过设置一系列规则来控制文件的依赖关系,...

    Makefile编写,精简版本。

    Makefile编写精简版本详解 Makefile是Linux系统中的一种脚本文件,用于自动编译和构建项目。下面是Makefile编写精简版本的详细解释: Makefile结构 Makefile文件通常由多个部分组成,每个部分都有其特定的功能。...

    Makefile编写手册.pdf

    ### Makefile编写手册知识点梳理 #### 一、Makefile概览 - **Makefile**是一种用于自动化构建过程的脚本语言,在Unix系统中被广泛使用。 - 通过编写Makefile,可以实现对软件项目的编译、链接等操作的自动化管理。 ...

    makefile编写指导原则

    【标题】:深入理解Makefile编写指南 【摘要】:Makefile是构建程序的重要工具,尤其是在Unix和Linux环境中。本文将详细介绍Makefile的编写原则,帮助开发者掌握这一关键技能,从而提升大型项目的编译效率。 ...

    Makefile编写学习教程

    ### Makefile编写学习教程 #### 一、Makefile的重要性及基本概念 Makefile是一种用于自动化构建过程的脚本文件,广泛应用于Unix、Linux系统下的软件开发。它通过定义一系列规则来控制编译流程,帮助开发者高效管理...

Global site tag (gtag.js) - Google Analytics