Makefile入门教程

Makefile介绍

make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。

Makefile格式

1 target: prerequisites
2         commands
3
4
5 目标文件: 依赖项
6         命令

最简单的Makefile

以Hello World为例:

(1) 先编写好源文件(.c文件),然后在同一目录下新建名为Makefile(之前首字母必须大写,现在大小写都行)的文本文件。

(2) 编写Mikefile

(3)打开终端,运行make命令,即可生成可执行文件hello,运行hello,即输出Hello World.

变量的定义及使用

1 CC = gcc            #定义变量并赋值
2 CFLAGS = -lm -Wall -g
3
4 hello: hello.c
5     $(CC)  $(CFLAGS)  hello.c - o  hello    #引用前面定义的变量,$(变量名),这种形式

实际效果没变,只是便于修改某些参数

使用变量替换后的情况:

同时编译多个可执行文件

例如:bar.c包含求数组中最大值函数,foo.c包含求数组中最小值函数,各自对应的头文件是bar.h、foo.h,main_max调用求最大值函数来打印最大值,main_min调用求最小值函数打印最小值。

Makefile可如下编写:

 1 CC = gcc
 2 CFLAGS = -O -Wall -m64 -std=gnu89
 3 LIBS = -lm
 4
 5 all: main_max main_min   #必须写成all这样的形式,否则只会生成前一个可执行文件main_max
 6
 7 main_max: main_max.c bar.o foo.o
 8     $(CC) main_max.c bar.o foo.o -o main_max
 9
10 main_min: main_min.c bar.o foo.o
11     $(CC) main_min.c bar.o foo.o -o main_min
12
13 foo.o: foo.c
14     $(CC) -c foo.c
15
16 bar.o: bar.c
17     $(CC) -c bar.c
18
19 .PHONY: clean20 clean:
21     rm *.o main_max main_min

clean

由于源代码发布通常不会有可执行文件和.o文件,使用 rm  *.o  xx(可执行文件名) ,再输入make clean命令就可以自动清除。

为了避免与名为clean的文件冲突,最好在clean前面加.PHONY。

原文地址:https://www.cnblogs.com/lfri/p/9693545.html

时间: 2024-11-04 05:44:15

Makefile入门教程的相关文章

CMake快速入门教程-实战

http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/details/6314073 http://www.cnblogs.com/coderfenghc/archive/2013/01/20/2846621.html http://blog.sina.com.cn/s/blog_4aa4593d0100q3bt.html http://hahack.com/c

CMake入门教程

CMake入门教程 参考文献:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html 官方网址:http://www.cmake.org/ 下载网址:http://www.cmake.org/download/ 当前版本:3.1rc3 本文基于CMake 2.8版本编写. CMake 是一个跨平台的,开源的构建系统(BuildSystem).CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建

转:CMake快速入门教程-实战

CMake快速入门教程:实战 收藏人:londonKu     2012-05-07 | 阅:10128  转:34    |   来源   |  分享      0. 前言一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使用方法,现在有时间拿出来整理一下.本文假设你已经学会了cmake的使用方法,如果你还不会使用cmake,请参考相关资料之后再继续向下看.本文中介绍的是生成可执行程序的方法和步骤,生成动态库和静态库的方法与此有所不同,随后会介绍动态库和静态库项目中cmake的编写方

《Redis5.x入门教程》之准备工作、数据类型

关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第二章 · 数据类型 第三章 · ?命令 第四章 ?· 配置 第五章 · Java客户端(上) 第六章 · 事务 第七章 · 分布式锁 第八章 · Java客户端(下) 第一章 · 准备工作 Redis安装 Redis5.0.7下载地址:https://redis.io/download mac OS 在下载完

&lt;zz&gt;bower入门教程

from http://www.cnblogs.com/xiaokai0203/p/5891927.html bower入门教程 什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和Grunt,这个会在以后的文章中介绍. 准备工作 安装node环境:node.js 安装Git,bower从远程git仓库获取代码包:git简易指南 安装bower 使用

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

SEO学习步骤总结入门教程

在这里,简单的把SEO的学习步骤说了一下,今天我们一起来把SEO学习步骤每一步的主要内容拿出来重点强调一下并做个总结.  定位好网站内容以后把你所想做排名的关键词定位好,关键词里包括了主关键词和长尾关键词.这里重点强调了不可以忽略长尾关键词的作用.  对于一个好的网站结构可以让搜索引擎蜘蛛顺利的抓取我网站的内容,进而达到被收录的目的.比较有利于蜘蛛抓取的网站结构,一般来说,收录数量相对来说会比较多.,只有让搜索引擎收录你网站页面那搜索引擎才会释放出来,这样网站关键词才可能有排名.  这里重点要注

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来