Makefile详解
原文链接:https://blog.csdn.net/qq_38646470/article/details/79917494
专栏链接:https://blog.csdn.net/column/details/20028.html
    或许很多Winodws 的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和 professional 的程序员,makefile 还是要懂。在Linux 下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完 成大型工程的能力。
    makefile 关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系 列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
    makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
下面就来看如何写Makefile文件:
Makefile文件编写规范:
目标:依赖文件
 $^  代表所有依赖文件
 $@  代表所有目标文件
 $<  代表第一个依赖文件
 %   代表通配符
 @指令:屏蔽指令
定义变量(变量大写)
变量名=值1 值2 ...
使用变量 $(变量名)
下来看事例:
假设我们有很多个文件(fun1.c  fun2.c  fun3.c   main.h)
假设最后我们就想得到main一个文件
初级版:
.PHONY : clean
main : fun1.o fun2.o fun3.o main.o
	gcc -g fun1.o fun2.o fun3.o main.o -o main
fun1.o : fun1.c main.h
	gcc -Wall -c -g -o fun1.o
fun2.o : fun2.c main.h
	gcc -Wall -c -g -o fun2.o
fun3.o : fun3.c main.h
	gcc -Wall -c -g -o fun3.o
clean :
	rm -rf *.o
精简版
.PHONY : clean
FM=fun1.o fun2.o fun3.o main.o
main : $(FM)
	(前面一个tab键)gcc -g $^ -o $@
%.c : %.o
	(前面一个tab键)gcc -c -g - Wall $< -o $@
clean :
	(前面一个tab键)rm -rf *.o
看看测试效果:
当然Makefile 还有很多其他的用处,如需更深层次了解请看makefile深度解析
Makefile详解的更多相关文章
- Helloworld模块之内核makefile详解
		Hello World 模块以及对应的内核makefile详解 hello.c: #include <linux/module.h> //所有模块都需要的头文件 #include < ... 
- Makefile详解--隐含规则
		Makefile详解--隐含规则(转) Makefile系列文章,这里有个前辈连续洗了一个系列来介绍,共有26篇博客文章. http://www.cppblog.com/ivenher/archive ... 
- 【转载】Linux下makefile详解--跟我一起写 Makefile
		概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ... 
- linux源码Makefile详解(完整)【转】
		转自:http://www.cnblogs.com/Daniel-G/p/3286614.html 随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 ... 
- makefile详解 嵌套执行make,定义命令包
		嵌套执行make 在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而 ... 
- linux源码Makefile详解
		1.Makefile的作用 (1)决定编译哪些文件 (2)怎样编译这些文件 (3)怎样连接这些文件,最重要的是它们的顺序如何 2.Linux内核Makefile分类 ***************** ... 
- 1.Tarball软件make与makefile详解(还需要补充)
		*通常自己安装的软件放在 /usr/local/软件名 中,而将源文件放在/usr/local/src *为安装到单独目录的软件之 man page 加入 man path 搜寻: 如果你安装的软 ... 
- MakeFile 详解
		最近在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出 ... 
- uboot-jiuding 下主Makefile详解
		主Makefile位于uboot源码的根目录下,其内容主要结构为: 1. 确定版本号及主机信息(23至48行)2. 实现静默编译功能(48至55行)3. 设置各种路径(56至123行)4. 设置编译工 ... 
- linux源码Makefile详解(完整)
		转自:http://www.cnblogs.com/Daniel-G/p/3286614.html 随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 ... 
随机推荐
- ASP.NET MVC多语言 仿微软网站效果
			文章转载自:https://blog.csdn.net/cooldiok/article/details/78313513 微软作为ASP.NET的创造者,它对于官网的结构设计肯定有值得我们借鉴和参考 ... 
- rz -be 上传文件解压失败
			在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ... 
- 编译Console程序时,可以指定Main入口函数
			有如下简单的console程序 using System; namespace HelloWorld { class Program { static void Main(string[] args) ... 
- 【模板】deque实现单调队列
			双端队列deque容器: 关于deque最常用的有这几个函数: 都是成员函数 双端队列模板题:[洛谷]P2952 [USACO09OPEN]牛线Cow Line #include<iostrea ... 
- 在任务管理器中显示所有CPU内核性能
			在Windows7"任务管理器"的”性能“选项卡默认显示所有的CPU内核性能 在Windows10中可以通过设置来实现效果 
- 打包dll发布到nuget服务器
			几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好 ... 
- 模糊控制——(4)Sugeno模糊模型
			1.Sugeno模糊模型 传统的模糊系统为Mamdani模糊模型,输出为模糊量. Sugeno模糊模型输出隶属函数为constant或linear,其函数形式为: 它与Mamdani模型的区别在于: ... 
- sqoop-1.4.7  搭建
			sqoop搭建环境: jdk1.8 hadoop分布式集群(HDFS) HIVE(看使用情况) 下载网址:http://sqoop.apache.org/ 建议: sqoop1.4. ... 
- Kafka设计解析(四)Kafka Consumer设计解析
			转载自 技术世界,原文链接 Kafka设计解析(四)- Kafka Consumer设计解析 目录 一.High Level Consumer 1. Consumer Group 2. High Le ... 
- PAT乙级1026
			1026 程序运行时间 (15 分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时 ... 
