MakeFile 学习日记(一)——makefile基本概念
来源:互联网 发布:.edu域名注册 编辑:程序博客网 时间:2024/04/29 04:10
最基本的Makefile:
---------------------------------------------------------------------------------------
原料:main.c
//main.c
#include "stdio.h"
void main()
{
printf("\nwelcom to learn Makefile\n");
}
编译:
gcc -o main main.c
MakeFile内容:
main:
gcc -o main main.c
clearn:
rm -rf main
---------------------------------------------------------------------------------------
1,以上内容没有产生main.o....
2,可以看到Makefile其实就是把要编译的命令写到特定的Makefile文件内
3,Makefile文件里最基本的东西
1>语法:
target:prerequisites ... ...
commond
....
...
target:prerequisites ... ...
commond
....
...
以这样的形式无限循环。
对应的例子:
main: 没有prerequisites
gcc -o main main.c
clearn:
rm -rf main
颜色对应。
2>注意:
commond 是在 target后另起一行,且必须以tab键开头,要不会语法错误
3>对上面的makefile进行修改
稍加修改的Makefile:
---------------------------------------------------------
main:main.o
gcc -o main main.o
main.o:main.c
gcc -c main.c
clearn:
rm -rf main
----------------------------------------------------------
运行make得到以下打印
----------------------------------------------------------
[root@bogon c2]# make
gcc -c main.c
gcc -o main main.o
----------------------------------------------------------
----->>>>相当重要的基础<<<<----
现象:先执行gcc -c main.c再执行gcc -o main main.o,与自己写的命令是反的?
结论:1,汉语描述Makefile语法
目标:前置条件1前置条件2 。。。 。。。
[tab键]命令行1
[tab键]命令行2
。。。
。。。
前置条件1:前提条件1的前置条件1前提条件1的前置条件2 。。。 。。。
[tab键]命令行3
[tab键]命令行4
。。。
。。。
前置条件2:前提条件2的前置条件1 前提条件2的前置条件2 。。。。。。
[tab键]命令行5
[tab键]命令行6
。。。
。。。
2,makefile语法调用相当于函数递归调用
也就是目标如果有前置条件,则makefile会自动先找前置条件作为目标,运行改前置条件作为目标的命令。
从上面的语法看,应该这样执行
1>执行【目标】,发现有【前置条件1】【前置条件2】
2>找【前置条件1】为【伪目标】的地方,执行【命令3】【命令4】
3>找【前置条件2】为【伪目标】的地方,执行【命令5】【命令6】
4>真正的【目标】没有其他前置条件了,执行【命令1】【命令2】
遗留问题:
当然我写这个例子的时候还有一些比较有意思的东西,比如我把第一行的【前置条件1】改了,Makefile会出些不一样的过程,可能是Makefile的一些自动机制吧。。高手讲解下
比较怪的Makefile:
---------------------------------------------------------
main:main.o
gcc -o main main.o
main1.o:main.c
gcc -c main.c
clearn:
rm -rf main
----------------------------------------------------------
运行make得到以下打印
----------------------------------------------------------
[root@bogon c2]# make
cc -c -o main.o main.c
gcc -o main main.o
----------------------------------------------------------
我改了红绿两色的地方,最后运行meke后的到下面的打印,红的为怪异的地方,但编译过程是好的。高手解释下原因。
- MakeFile 学习日记(一)——makefile基本概念
- Makefile 学习日记(三)——makefile的瘦身
- Makefile 学习日记(五)——makefile中的函数
- 学习日记:如何写Makefile(一)
- Makefile学习(一)——初识Makefile
- Makefile 学习日记(二)——有头文件的makefile
- Makefile 学习日记(四)——makefile的基本规则
- makefile学习(一)
- makefile学习(一)
- makefile学习(一)
- Makefile学习(一)
- makefile 学习(一)
- Makefile学习(一)
- Makefile学习(一)
- Makefile 学习笔记(一) Makefile简介
- Makefile学习笔记(一)
- Makefile学习笔记(一)
- Makefile学习笔记(一)
- 论TextView的超链接使用、显示表情、Html语法支持、跑马灯效果的实现
- 内部排序算法总结
- activemq下载 解压 启动
- 快速排序
- 基础总结
- MakeFile 学习日记(一)——makefile基本概念
- MATLAB GUI设计之静态文本框多行显示的问题
- 为什么基类的析构函数声明为虚函数?
- pca程序分析
- 剑指offer 反转链表
- Unity使用 16bit 压缩 Texture 颜色能均匀过渡
- webService服务端与客户端
- JavaScript模块化开发2
- cocos2dx TMX地图