arm裸机学习预备知识三:Makefile

本文详细介绍了Makefile的使用,包括其引入、基本规则、通配符、假象目标、变量类型和函数的运用。通过实例展示了如何自动化处理文件依赖,以及在修改头文件后自动编译相关源文件,提高开发效率。
摘要由CSDN通过智能技术生成

注:以下学习内容学习于韦东山老师arm裸机第一期教程

一.Makefile的引入及规则

    1.1 在keil,mdk,avr等工具开发程序时点点鼠标就可以编译了,他的内部机制就是使用Makefile来组织管理程序,决定编译哪一个文件.

    1.2 如下例:

        
        a.c文件
        
        #include<stdio.h>

        int main()
        {
            func_b();
            return 0;
        }
        
        b.c文件
        
        #include <stdio.h>

        void func_b()
        {
            printf("This is func_b!\n");
        }

        将两个文件上传到Linux服务器用gcc进行编译

        gcc -o test a.c b.c

       执行生成的test程序,成功打印出了This is func_b!

        

        对于gcc -o test a.c b.c命令

            a.具体流程:  对a.c执行预处理、编译、汇编、得到a.o

                               对b.c执行预处理、编译、汇编、得到b.o

                               最后将a.o b.o链接起来得到test应用程序

            b.这条命令在每次执行时都会对a.c,b.c进行重新处理,及时没有经过修改也会进行一次处理过程(当文件很多时就会使得效率低下)

            

             目的:只对被修改的文件进行重新编译,那么如何知道哪个文件被修改了?

            方法:比较 a.o与a.c的时间,如果不同说明a.c被修改

                   比较 b.o与b.c的时间,如果不同说明b.c被修改

                   比较 a.o、b.o与test的时间,如果不同需要重新生成test                

                    
                

    1.3 Makefile的基本语法规则

    

        目标文件:依赖文件1,2.....

        (tab键)    :命令

        当依赖比目标新,或者目标不存在时执行命令

        编写Makefile如下   

            test:a.o b.o
                gcc -o test a.o b.o、b
            a.o:a.c
                gcc -c -o a.o a.c
            b.o:b.c
                gcc -c -o b.o b.c           

        编译程序时直接执行make命令即可,只会编译被修改的文件.

        直接执行make,如下,两个文件都被编译

        book@www.100ask.org:/work/arm9/hareware/5.Makefile/001.test_app$ make
        gcc -c -o a.o a.c
        gcc -c -o b.o b.c
        gcc -o test a.o b.o

        修改a.c文件之后再次执行make,如下,只对a.c进行了编译

        book@www.100ask.org:/work/arm9/hareware/5.Makefile/001.test_app$ make
        gcc -c -o a.o a.c
        gcc -o test a.o b.o        

二.Makefile语法

    2.1 通配符%.o, $@, $<, $^

        在上面的Makefile中,

        test:a.o b.o
                gcc -o test a.o b.o
        a.o:a.c
            gcc -c -o a.o a.c
        b.o:b.c
            gcc -c -o b.o b.c

        如果有很多很多.c文件,难道要一个个写吗?

        因此引入通配符

        test:a.o b.o
            gcc -o test $^
        %.o:%.c
            gcc -c -o $@ $<

        $@表示目标文件,$<表示第一个依赖文件,&^表示所有的依赖


        如果要添加一个c.c文件,直接在b.o后面添加一个c.o即可,如下:

        test:a.o b.o c.o
            gcc -o test $^
        %.o:%.c
            gcc -c -o $@ $<    

    2.2 假象目标

        
        2.2.1 假设想要清除文件,修改Makefile如下
            test:a.o b.o c.o
                gcc -o test $^
            %.o:%.c
                gcc -c -o $@ $<    
                
            clean:
                rm *.o test</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值