【Linux】Makefile文件
Makefile文件
1. Makefile定义
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
2. Makefile 介绍
make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。
首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:
- 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
- 如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
- 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。
3. Makefile简单示例
3.1 代码模块
- main.h
#include<stdio.h>
- main.cpp
#include "main.h"int a(int,int);
int b(int,int);
int c(int,int);
int d(int,int);int main()
{printf("a = %d\n", a(20,4));printf("b = %d\n", b(20,4));printf("c = %d\n", c(20,4));printf("d = %d\n", d(20,4));return 0;
}
- a.cpp
#include "main.h"int a(int a,int b)
{return a+b;
}
- b.cpp
#include "main.h"int b(int a,int b)
{return a-b;
}
- c.cpp
#include "main.h"int c(int a,int b)
{return a*b;
}
- d.cpp
#include "main.h"int d(int a,int b)
{return a/b;
}
3.2 Makefile基本规则
目标文件:依赖文件
(tab)编译规则$^ 代表所有依赖文件$@代表目标文件
main:main.o a.o b.o c.o d.og++ $^ -o $@
%.o:%.cppg++ -c $^ -o $@
.PHONY:clean
clean:rm -rf *.o用%.o和%.c代替所有的依赖文件也是可以的
隐式规则,生成.o文件自动去寻找同名.c文件进行编译,所以.o的目标都不用写。伪指令(.PHONY)
如果文件的时间戳没有发生变化,我们make的时候是不会在编译的,因此我们可以用伪指令来让每次make都会执行此文件make main
make clean(这两个都可以试一下)
4. Makefile优点
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的make,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
【Linux】Makefile文件相关推荐
- Linux——Makefile文件
Makefile/makefile Windows环境下IDE会自动帮你完成makefile文件的编写,Linux上我们需要自己编写. Makefile文件,我们可以将其理解为一个工程文件的编译规则, ...
- linux makefile文件怎么生成,Makefile文件生成
所必须的软件:autoconf (generate configuration script [configuration]) automake( aclocal:automatically gene ...
- Linux编程——入门级Makefile文件编写
前言 1.在Linux开发环境中,编写Makefile文件是一个必须的技能,虽然现在有好多IDE可以自动生成所需要的Makefile文件,但有时能看懂Makefile文件也是更好的了解项目的编译过程. ...
- Linux平台Makefile文件的编写基础篇和GCC参数详解
问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...
- 【Linux】makefile文件基础
linux系统上管理工程使用makefile文件,其中写了工程编译的规则以及编译顺序.只需要每次执行make命令,make自动在当前目录下搜索Makefile或makefile,按照makefile中 ...
- 分析Linux 0.11中的kernel部分的makefile文件
# # 在UltraEdit下注释 # # # # if you want the ram-disk device, define this to be the # size in blocks. ...
- Linux内核Makefile文件
Linux内核Makefile文件(翻译自内 核手册) 转载自:http://blog.chinaunix.net/uid-21651676-id-60377.html Linux 内核Makefil ...
- 多线程编译与运行linux,Linux系统下多线程程序编译makefile文件
在Linux下,编译一个多线程的程序命令为: gcc -lpthread -o file file.c 在Linux下,用交叉编译器编译一个在uclinux下运行的多线程程序,makefile文件如下 ...
- Linux作业 使用make命令和分析makefile文件
使用make命令和分析makefile文件 diction是一个经典的Unix小工具,用来检测使用不当的英文短语. 请前往 http://www.gnu.org/software/dictio ...
最新文章
- VS code for python开发利器
- 我在 GitHub 上发现了一款骚气满满的字体!
- 实现先pop后push的效果,如支付成功后的界面
- @font-face详细用法+实例——Web响应式前端学习笔记
- Android九宫格闪烁,js实现九宫格点击按钮随机三个格子闪烁,发生错误
- CORS 跨域 实现思路及相关解决方案
- plsql 连接oralce数据库,报ora 12557 tns 协议适配器不可加载错误
- storm the 少儿英语_米粒英语绘本课堂——The Snowstorm
- ucinet网络分析使用总结
- ImageJ开发插件注意事项
- 电脑键盘部分按键失灵_键盘按键失灵别担心 电脑达人教你几步解决方法
- 无法识别 移动固态硬盘_固态硬盘不识别怎么办 固态硬盘不认盘解决方法介绍...
- 联想跨国收购余震:摩托罗拉裁员千人
- 14_美年_图形报表,POI报表_运营数据统计_运营数据统计报表导出
- DAY9:尚学堂高琪JAVA(98)
- 在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能
- 打造超级IP,你真悟错了道!
- MySQL数据库篇---对数据库,数据库中表,数据库中表的记录进行添修删查操作---保姆级教程
- CRC校验原理的完整学习
- 腾讯地图实现点击搜索地址功能
热门文章
- Android开发--环境的配置
- 一个简单的blog系统(四) 实现用户页面和文章页面
- 翻译:打造Edge渲染内核的浏览器
- 最快最新最详细的IT电子书
- 隐藏画质代码_和平精英120帧率怎么设置?和平精英120帧率代码介绍!
- [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点
- iOS之使用CAShapeLayer实现复杂的View遮罩效果
- Windows 10每天定时执行脚本
- PAT (Basic Level) Practice (中文)1005 继续(3n+1)猜想 (25 分)
- 【机器视觉】 read_measure算子