您的位置:首页 > 运维架构 > Linux

MakeFile 学习日记(一)——makefile基本概念

2016-03-12 17:41 519 查看
最基本的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 Linux