为什么要使用Makefile工具?当源代码文件很多时,不适合直接使用gcc命令进行编译。
此时,需要使用自动编译工具进行编译。
一般说来Make是GNU Make是一种用于将源代码文件编译成可执行二进制文件的软件。
make工具主要用于完全自动化的编译。
在make编译期间,需要Makefile文件来提供已编译的文件。
1.介绍Makefile ac ------> ***。
s ------> ***。
ob.c ------> xxx.s ------ > xxx。
oxxx.o + ***。
o ------>测试缺点:必须重新编译所有.c文件才能修改任何文件。
您可以想象更多的文件,所以不能浪费时间!改进:应该单独编译,最后与gcc -c ac gcc -c b.cgcc ao bo -o测试链接。
为此,您需要这样的工具:01.如果尚未编译项目,则必须将项目中的所有.c文件编译并链接到可执行程序中。
02.如果仅修改了项目中的单个C文件,则只能编译这些修改的C文件。
03.如果项目的头文件被修改,那么我们需要编译所有引用该头文件的C文件,并将它们链接到可执行文件中。
2. Makefile的基本规则:当依赖项比目标文件新时,执行命令目标文件:依赖文件TAB键命令根据Makefile的基本规则,我们为上述gcc编译过程编写了一个Makefile文件,如下所示:测试:ao b。
ogcc -o test ao b.oa.o:a.cgcc -c a.cb.o:b.cgcc -c b.cclean:rm * .orm test这样,我们可以使用make命令来完成编译和ac bc链接,直接生成测试执行文件。
3. Makefile的变量Makefile也可以添加变量,但是Makefile与C语言不同,没有很多类似于int char…的类型,等等,只有字符串类型,例如,您可以定义一个对象= ao bo参考变量使用$(objdect)就是这样。
这样,可以尽可能简化上述Makefile,而无需两次输入ao bo,如下所示:objdect = ao b.otest:$(object)gcc –o test $(object)ao:ac gcc- c a.cb .o:bc gcc -c b.cclean:rm * .orm测试4. Makefile通配符%和自动化变量。
如果上面的Makefile中有很多.c文件,那么我们需要编写很多依赖规则。
您可以使用通配符来匹配简体字,%。
c表示所有.c文件,%。
o表示所有.o文件,我们当然可以放上面的! b.o依赖于b.c,a.o依赖于a.c,等等,以%.o的形式写成,依赖于%.c。
对于命令,您需要引入另一个称为自动化的变量。
如何通过单行命令从不同的从属文件生成相应的目标?自动化变量用于实现此功能。
自动化变量中常用的是$ @,$ $ @:规则中的目标集$ $ ^:所有相关文件的集合,以便我们可以简化MakeFile ...,如下所示:objdect = ao b。
otest:$(object)gcc -o test $(object)%。
o:%.c gcc -c [DISCUZ_CODE_0] lt; clean:rm * .orm test 5.我们经常使用make clean来删除Makefile伪目标Task ,只有当我们在当前目录中添加一个名为clean的文件时,make clean仍然可以使用吗?解决方案如下:使用伪目标并将干净定义为假设目标。
objdect = ao b.otest:$(对象)gcc -o测试$(object)%。
o:%.c gcc -c [DISCUZ_CODE_0] lt; clean:rm * .o test.PHONY:clean 6. Makefile条件判断Makefile还支持条件判断。
有两种语法,如下所示:endif endif条件关键字:ifeq,ifneq,ifdef,ifndef,这四个条件关键字分为两对:ifeq和ifneq用于相等; ifdef和ifndef用于相等性确定是否定义了它。
结束本文由21ic Blue V的作者一直撰写到贝勒姆。
▍推荐阅读哦,您能知道51单片机的精确延迟吗?在电路图的前十大差异中,您的立场是什么?早期的MCU芯片如何加密? →跟随,不要迷路←免责声明:本文内容经21ic授权后发表,版权归原作者所有。
该平台仅提供信息存储服务。
本文仅代表作者的个人观点,并不代表该平台的立场。
如有任何疑问,请与我们联系,谢谢!