• 【ARM 嵌入式 编译 Makefile 系列 15.1 -- arm gcc 与 Makefile 一块使用示例】



    请阅读【ARM GCC 编译专栏导读】

    文章目录

    Makefile 开发示例

    嵌入式开发中,经常需要使用ARM GCC编译器和Makefile一起使用。以下是一个简单的示例:

    首先,我们需要安装ARM GCC编译器;然后,我们创建一个Makefile,内容如下:

    # 指定编译器 
    CC=arm-none-eabi-gcc 
    
    # 指定编译参数 
    CFLAGS=-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 
    
    # 指定目标文件 
    TARGET=main 
    
    # 指定源文件 
    
    SRCS=main.c startup.c 
    
    all: 
    	$(TARGET).elf 
    
    # 编译目标文件 
    $(TARGET).elf: $(SRCS) 
    	$(CC) $(CFLAGS) $^ -o $@ 
    
    clean: 
    	rm -f $(TARGET).elf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    下面对上面的Makefile 内容逐行解释:

    • CC=arm-none-eabi-gcc:定义了一个名为CC的变量,表示编译器,这里使用的是ARM GCC编译器

    • CFLAGS=-mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16:定义了一个名为CFLAGS的变量,表示编译参数,如指定CPU类型为Cortex-M4,使用Thumb指令集,浮点硬件支持等;

    • TARGET=main:定义了一个名为TARGET的变量,表示目标文件,编译后的可执行文件名为main

    • SRCS=main.c startup.c:定义了一个名为SRCS的变量,表示源文件,这里有两个源文件:main.cstartup.c

    • all: $(TARGET).elf:定义了一个目标名为all,它依赖于$(TARGET).elf,即main.elf。在没有指定具体目标的情况下,make命令默认执行第一个目标,这里就是all

    • $(TARGET).elf: $(SRCS):定义了一个目标main.elf,它依赖于源文件$(SRCS)。当源文件有改动时,main.elf会被重新生成;

    • $(CC) $(CFLAGS) $^ -o $@:这是生成main.elf的命令。$@表示目标文件,$^表示所有依赖文件。这条命令的含义是调用CC变量指定的编译器,使用CFLAGS变量指定的编译参数,编译所有依赖文件,输出为目标文件;

    • clean::定义了一个目标名为clean,用于清理编译生成的文件;

    • rm -f $(TARGET).elf:这是执行clean目标的命令,用于删除编译生成的main.elf文件。

    这个Makefile的工作流程是:执行make命令后,由于默认目标是all,所以会去生成all目标依赖的main.elf,而生成main.elf需要编译main.cstartup.c,编译完成后会生成main.elf文件。如果执行make clean命令,那么会删除编译生成的main.elf文件。

    注意,你需要根据你自己的项目环境和需求来修改这个Makefile。例如,你可能需要修改编译器路径、编译参数、目标文件名、源文件列表等。

  • 相关阅读:
    Centos7常用基本命令使用(进程管理类、网络状态类、系统定时类)
    Android学习笔记 13. TableLayout 表格布局
    非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.1 类变量和类方法
    2023-10-24 小总结
    leecode#用Read4读取n个字符#相交链表
    前端利用原生canvas生成图片
    OrdinaryKriging3D插值出的结果都是均值问题查找
    C++ DAY08 异常
    代码审计基础php_bugs
    Java集合类——ArrayList(扩容机制)
  • 原文地址:https://blog.csdn.net/sinat_32960911/article/details/132326910