对于Makefile的重要性大家应该都有所了解,这有一篇对Makefile的讲解非常好的文章,链接如下:http://blog.csdn.net/ruglcc/article/details/7814546/
所以本篇文件就没必要再写类似的了,即使写了也没链接里面原创作者写的好,所以这里我简单的介绍在一般的开发过程中怎么写一些简单的Makefile,帮一些不是太了解的童鞋对Makefile有个初步的认识。
附图
图1-1
图1-1所示的列子是一个简单的将当期目录下应用程序编译为对应的可执行文件。此列程稍加修改可以编译库文件,只要你明白了,都好操作。
现在说下上述列子中的执行动作含义以及一些自动化变量,函数意思。
1:CROSS_COMPILE,CC,STRIP,这些我想大家都应该知道指定对应的工具链及对生成文件的简化动作。
2:ARFLAGS这个参数是用在生成共享库操作中的,此处只是做个保留。
3:INC表示编译程序时候文件依赖头文件路径,以-I参数来表示,如果有多个include,我们可以用INC+=,这种追加的方式在下 一行添加,这样比直接把所有依赖头文件放在一行,看上去简洁。
4:DLIBS,依赖库名称。这个名称随便写,不过写出来的要能正确表达意思。这里的-ltest表示依赖裤的名称,写成-ltest,依赖库大概类似libtest.so这样。我们平时看到的-lpthread,-lm这些都是一样的道理,指定编译器找指定的裤名称。
5:LDFLAGS=-L./lib,用来告诉Makefile在工作过程中去当期的lib目录下去查询所依赖的裤,一般用-L来表示此操作。
6:RPATH,如果在编译的过程中ld不是直接被调用的,而是通过gcc来包含了ld的动作,那么就要加上-W1选项。另外说下rpath和rpaht-link的区别,
rpath指定的路径包含在可执行文件elf中,运行的时候调用。rpath-link只在链接时使用,用在本地链接器,所以大家在使用过程中注意了。
7:filter,patsubst。这些都是Makefile函数,详细的具体说明都在前面的Makefile详解链接里面。
filter函数在此处的意思是过滤$(DIR_SRC_FILE)中文件,只要后缀为.c的文件。
patsubst,模式字符串替换函数。格式如此,$(patsubst <pattern>,<replacement>,<text> )查找<test>中的单词,如果符合模式<pattern>,则用
<replacement>模式替换。
8:现在剩下的说明下常用的自动变量。
$@:表示一个规则中的目标文件名。
$%:当规则的目标文件是一个静态库文件时,此代表静态库的一个成员名。
$<:规则中的第一个依赖文件。
$>:表示库名,和$%一样适合库文件。
$?:所有比目标文件新的依赖文件列表,以空格分隔。
$^:规则的所有依赖文件列表,用空格分开。
$+:类似“$^”,不过保留了依赖文件中重复出现的文件。
$*:其值是目标文件去掉后缀后的名称。
对于Makefile的大致介绍就完毕了,基本上大家在写小型的项目的过程中上述所述可以帮你搞定,由于本文只是做个大致介绍,如果想要升入了解,读者自己学习即可。