<!--
@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 的基本规则 #### 一、Makefile 概述 Makefile 是一种广泛应用于软件构建过程中的自动化脚本文件,主要用于描述项目构建过程中的依赖关系和构建步骤。对于习惯于集成...
Makefile是Unix/Linux环境下自动...通过阅读《Makefile 编写详解.pdf》这份资料,你可以更深入地了解如何编写高效的Makefile,优化你的开发流程。学习并熟练运用Makefile,是成为一名专业IT开发者不可或缺的技能之一。
`Makefile` 的编写是项目构建自动化的核心,它定义了一系列规则,告诉操作系统如何构建、编译、测试软件。下面将深入探讨 `Makefile` 的编写及其相关知识点。 首先,我们要理解 `Makefile` 的基本结构。`Makefile` ...
本示例主要探讨的是如何为Linux驱动程序模块编写一个多文件的Makefile,以便于编译和加载。 首先,我们需要理解Makefile的基本结构和规则。Makefile由一系列的目标(target)和依赖(dependency)组成,目标通常是...
makefile编写
在Linux环境下进行C编程时,掌握`makefile`的编写至关重要,因为它是构建和管理项目的关键。`makefile`是一种自动化编译工具,它定义了项目中源文件的编译顺序、依赖关系以及各种编译规则,极大地提升了开发效率。在...
Makefile 编写方法 Makefile 是一个非常重要的文件,在 Unix 下的软件编译中 plays a crucial role。它定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂...
### Makefile编写技术细节 #### 一、Makefile的重要性及概念 Makefile是软件开发过程中不可或缺的一部分,尤其在Unix/Linux环境中。它不仅能够自动化管理项目的编译过程,还能提高开发效率,确保项目的可维护性和...
此代码是多层makefile编写的简单例程。
这份“非常完善的makefile编写指导说明”旨在帮助开发者掌握makefile的编写技巧,使得编译工作更加高效、自动化。 首先,`makefile`的核心在于规则(rules),每条规则都包含了目标(target)和依赖项...
### Linux下C语言的makefile编写 #### 一、引言 在Linux环境下,makefile是一种用于自动化构建软件项目的脚本文件。对于大型项目来说,手动管理编译过程既耗时又容易出错。通过makefile,开发者可以定义一套规则,...
Linux 下 Makefile 编写规则 Makefile 是一个帮助程序员构建项目的工具,它按照项目的需求个性化的定义自己的构建过程。在 Linux 系统下,Makefile 是一个非常重要的文件,它可以帮助开发者自动化地构建项目。但是...
【Makefile编写指导】 在软件开发中,尤其是Unix或Linux环境下,Makefile是一个至关重要的工具,它定义了项目中各种文件的编译规则和依赖关系,使得自动化编译成为可能。Windows开发环境中,IDE通常会自动处理这些...
### Makefile编写详解 #### 一、Makefile概念与作用 **Makefile** 是一种用于自动化构建过程的脚本文件,广泛应用于软件工程领域。它主要用于定义如何编译和链接程序,通过设置一系列规则来控制文件的依赖关系,...
Makefile编写精简版本详解 Makefile是Linux系统中的一种脚本文件,用于自动编译和构建项目。下面是Makefile编写精简版本的详细解释: Makefile结构 Makefile文件通常由多个部分组成,每个部分都有其特定的功能。...
### Makefile编写手册知识点梳理 #### 一、Makefile概览 - **Makefile**是一种用于自动化构建过程的脚本语言,在Unix系统中被广泛使用。 - 通过编写Makefile,可以实现对软件项目的编译、链接等操作的自动化管理。 ...
【标题】:深入理解Makefile编写指南 【摘要】:Makefile是构建程序的重要工具,尤其是在Unix和Linux环境中。本文将详细介绍Makefile的编写原则,帮助开发者掌握这一关键技能,从而提升大型项目的编译效率。 ...
### Makefile编写学习教程 #### 一、Makefile的重要性及基本概念 Makefile是一种用于自动化构建过程的脚本文件,广泛应用于Unix、Linux系统下的软件开发。它通过定义一系列规则来控制编译流程,帮助开发者高效管理...