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后的到下面的打印,红的为怪异的地方,但编译过程是好的。高手解释下原因。







 


0 0