Makefile介绍

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

Makefile格式

 target: prerequisites
commands 目标文件: 依赖项
命令

最简单的Makefile

以Hello World为例:

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

(2) 编写Mikefile

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

变量的定义及使用

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

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

使用变量替换后的情况:

同时编译多个可执行文件

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

Makefile可如下编写:

 CC = gcc
CFLAGS = -O -Wall -m64 -std=gnu89
LIBS = -lm all: main_max main_min #必须写成all这样的形式,否则只会生成前一个可执行文件main_max main_max: main_max.c bar.o foo.o
$(CC) main_max.c bar.o foo.o -o main_max main_min: main_min.c bar.o foo.o
$(CC) main_min.c bar.o foo.o -o main_min foo.o: foo.c
$(CC) -c foo.c bar.o: bar.c
$(CC) -c bar.c .PHONY: clean
20 clean:
rm *.o main_max main_min

clean

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

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

Makefile入门教程的更多相关文章

  1. CMake快速入门教程-实战

    http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/detai ...

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

    CMake快速入门教程:实战 收藏人:londonKu     2012-05-07 | 阅:10128  转:34    |   来源   |  分享               0. 前言一个多月 ...

  3. 转:asm.js 和 Emscripten 入门教程

    转:http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html asm.js 和 Emscripten 入门教程 作者: 阮一峰 日期:  ...

  4. CMake入门教程(转帖)

    本文转自:https://www.cnblogs.com/never--more/p/6921837.html CMake入门教程 参考文献:http://www.ibm.com/developerw ...

  5. Linux 新手入门教程

    Linux 新手入门教程 1991年10月5日,Linus Torvalds 在互联网上发布消息,宣布他自己开发的内核系统诞生了.他将内核源代码保存在芬兰最大的 FTP 网站上,命名为 Linux,取 ...

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

    关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. 第一章 · 准备工作 Redis安装 Redis5.0.7下载地址:h ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例

    创建项目 dotnet new -i IdentityServer4.Templates 多出来的这些模板 adminUI用来测试,想要用再生产环境,需要交钱 结合core的 Identity来使用 ...

  2. E20181121-hm

    invoke vt. 乞灵,祈求; 提出或授引…以支持或证明; 召鬼; 借助

  3. 51nod - 1363 - 最小公倍数之和 - 数论

    https://www.51nod.com/Challenge/Problem.html#!#problemId=1363 求\(\sum\limits_{i=1}^{n}lcm(i,n)\) 先换成 ...

  4. Git之设置对文件名大小写敏感

    关键命令 git config core.ignorecase false

  5. POJ3735【矩阵快速幂】

    逛了一圈...觉得这篇讲的比较清楚:传送门~ 简要概括: 1.线性代数的知识,单位矩阵的利用:(如果不知道单位矩阵的,先去补习一下线代,做几题行列式就会了): 2.然后构造好矩阵以后,直接做M次乘积运 ...

  6. VC++11 编译中的一些问题的解决办法

    1.  vc++ 的编译器的错误往往定位在错误的那一处,但是那一处可能在库的底层,而我们知道库,一般都不会错. 这时候应该好好看看我们自己的头文件是否正确,有可能头文件中的一些错误引发了连锁反应. 2 ...

  7. IT兄弟连 JavaWeb教程 MVC设计模式

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视 ...

  8. mysql 5.5.58 tar包安装部署

    环境: centos 7.4 64位 mysql 版本,5.5.58 glibc 64 位版,下载地址:https://dev.mysql.com/downloads/mysql/5.5.html#d ...

  9. [Python]IndentationError: unindent does not match any outer indentation level

    这个是缩进没对齐 可能是混用了tab与空格,到这里显示空白就可以看出来.

  10. jieba gensim 最好别分家之最简单的相似度实现

    简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能 ...