Makefile文件格式

  Make的工作主要依赖于一个叫Makefile的文件。Makefile文件描述了整个程序的编译、链接等规则。

1、Makefile格式

targets : prerequisites
  command

targets:目标

prerequisites:依赖

command:命令,命令需要使用[TAB]键空格

例:

led.elf : led.o
  arm-linux-ld -Tled.lds -o led.elf led.o

2、Makefile构成-伪目标

Makefile把那些只包含命令,没有任何依赖的目标称为“伪目标”.

.PHONY : clean
clean :
  rm -f hello main.o func.o

3、 Makefile构成-最终目标

  1. Make led.o //Makefile查找目标为led.o的规则并执行。
  2. Make //默认执行第一条规则,第一条规则的依赖文件找不到的话,自动执行目标文件为第一条规则的依赖文件的规则。
  3. 用户自定义的变量

4、Makefile构成-自定义变量

使用变量前:

app1: app1.o func1.o func2.o -o app1
    gcc app1.o func1.o func2.o -o app1
app2: app2.o func1.o func2.o -o app2
    gcc app2.o func1.o func2.o -o app2

使用变量后:

obj=func1.o func2.o
app1: app1.o $(obj)
    gcc app1.o $(obj) -o app1
app2: app2.o $(obj)
    gcc app2.o $(obj) -o app2

5、系统定义好的变量

$^:代表所有的依赖文件

$@:代表目标

$<:代表第一个依赖文件

使用前:

led.o : led.S
    arm-linux-gcc -g -o led.o -c led.S

使用后:

led.o : led.S
arm-linux-gcc -g -o $@ -c $^

6、Makefile构成-通配符

%.o //表示所有以.o结尾的文件

%.c //表示所有以.c结尾的文件

%.s //表示所有以.s结尾的文件

  ……

1.1.6. Makefile使用技巧

  1. 注释:“#注释内容”
  2. 去回显:命令前加“@”

1.1. 链接器脚本  

SECTION{
. = 0x30000000   # .是指当前地址,在此处设置起始链接地址为0x30000000

. = ALING(4);   #设置4字节对齐
    .text:     #代码段
    {
    start.o(.text) #代码段0地址执行的程序名
    *(.text)
    }

. = ALING(4)     #设置4字节对齐
    .data:       #数据段
    {
    *(.data)
    }

    . = ALING(4)     #设置4字节对齐
    bss_start = .;   #定义变量=当前位置地址
    .bss:       #BSS段
    {
    *(.bss)
    }
    bss_end = .; 定义变量=当前位置地址
}
原文地址:https://www.cnblogs.com/Mike2019/p/12190346.html