zoukankan      html  css  js  c++  java
  • Linux下的Makefile初入

    在Windows下的开发环境中用集成的IDE编辑器的话,会经历编写、编译、下载/执行,而在Linux下没有这些,这就需要我们自己来进行创造。

    Makefile的作用就是对代码进行编译,我们在进行一个已经写好的代码进行编译的时候回执行如下指令

    1 gcc a.c -o a.out

    这样做的话一个文件少没问题,而一旦文件多达上百个的时候,我们不可能还要一个一个的敲,这时候就需要使用Makefile

    NAME    := led                       #工程名字
    OBJ     := a.o b.o start.o           #链接文件名
    
    ARM     := arm-linux-gnueabihf-      #编译语句
    GCC     := $(ARM)gcc                 #编译文件
    LD      := $(ARM)ld                  #链接文件
    OBJCOPY := $(ARM)objcopy             #编译为bin文件
    OBJDUMP := $(ARM)objdump             #反编译为汇编文件
    
    $(NAME).bin:&(OBJ)
        $(LD) -Ttest 0x87800000 $^ -o $(NAME).lef        
        $(OBJCOPY) -O binary -S $(NAME).lef $@
        $(OBJDUMP) -D -m arm $(NAME).lef > $(NAME).dis
    
    %.o:%.s
        $(GCC) -Wall -nostdlib -c -O2 -o $@ $<
    
    %.o:%.S
        $(GCC) -Wall -nostdlib -c -O2 -o $@ $<
    
    %.o:%.c
        $(GCC) -Wall -nostdlib -c -O2 -o $@ $<
    
    clean:
        rm -rf *.0 *.lef *dis

    在makefile中,可以像C语言中定义变量 NAME、OBJ、ARM、GCC、LD、OBJCOPY、OBJDUMP 就为变量 而$( NAME)则使用变量 如

    ARM     := arm-linux-gnueabihf-      #编译语句
    GCC     := $(ARM)gcc                 #编译文件
    
    #等效于
    
    arm-linux-gnueabihf-gcc

    %.c %.o %.s 为通配符,表示文件下所有.c .o .s文件

    %.o:%.c 等效于 a.o:a.c,表示.o文件依赖于.c文件,原理是如果.c文件的时间比.o文件的时间新,则执行

    a.o:a.c
      $(GCC) -Wall -nostdlib -c -O2 -o $@ $< 等效于
    arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o a.o a.c

    链接所有.o文件  0x87800000为代码起始地址

    $(LD) -Ttest 0x87800000 $^ -o $(NAME).lef  
    等效于
    arm-linux-gnueabihf-ld -Ttest 0x87800000 a.o -o a.lef

    把.lef文件编译为bin文件

    $(OBJCOPY) -O binary -S $(NAME).lef $@
    等效于
    arm-linux-gnueabihf-objcopy -O binary -S a.lef a.bin

    反汇编,把bin文件编译为.dis 汇编文件

    $(OBJDUMP) -D -m arm $(NAME).lef > $(NAME).dis
    等效于
    arm-linux-gnueabihf-objump -D -m arm a.lef > a.dis

    根据我自己所理解的程度编译的,可能不详细,见谅

  • 相关阅读:
    1、scala安装和基本语法
    3.12-3.16 Hbase集成hive、sqoop、hue
    3.7-3.9 HBase表属性
    3.4-3.6 依据业务需求分析HBase的表设计
    字符串匹配[原始方法]
    括号匹配[栈]
    13.A={1,2,3,5}和为10的问题
    12.回溯递归
    11.字符串{a,b}的幂集[回溯递归]
    10.N个整数中查找是否相加为K[深度搜索]
  • 原文地址:https://www.cnblogs.com/puchi/p/11813188.html
Copyright © 2011-2022 走看看