【makefile】自动化变量的简述及实例

文章目录

  • 10. env
  • 20. 简述
    • 百度百科
    • 常用的自动化变量
  • 30. 实例
  • 90. 附件下载

10. env

ubuntu=1804
GNU Make 4.1

20. 简述

百度百科

https://baike.baidu.com/item/Makefile/4619787?fr=ge_ala

makefile 文件的格式:
目标:依赖
	命令
软件编译的流程概述:
	编译:编译源代码(包括预编译等等步骤)
	链接:将编译后的代码链接到一起
PS:
	makefile的管理规则是如果形成目标文件的各类依赖中存在更新(修改日期大更新),则根据依赖关系编译/链接相关文件。
	假设形成一个test的可执行文件需要main.c的源码,如果main.c被修改,则日期会同步更新,那么test会从编译源码开始重新执行,如果main.c未被修改,则日期并不会比当前test中使用的源码更新,所以不需要重新生成test。

常用的自动化变量

$@	: 目标的完整名称
$<	: 第一个依赖文件
$^	: 所有依赖文件

30. 实例

# 指定编译器,c编译器默认为cc
CC  := gcc

# 通过源文件的名称得到所有依赖的文件名称
src     := $(shell ls *.c)
objs    := $(patsubst %.c,%.o,$(src))

# make会生成第一个碰到的target
.PHONY : all
all     :   test
# 这里为什么不直接使用test:xxx,二需要通过all转一下?
# 自己试一下就知道了,不转会导致cmd(即编译.o)默认执行,这会导致反复生成.o文件

# 生成的目标问价及其依赖,最终的目标需要多种.o依赖。
# $^ 表示所有依赖文件,每个依赖文件以空格隔开
test    :   $(objs)
    $(CC) -o $@ $^

# 目标文件需要的.o文件需要依赖.c文件。
# 由于生成.o文件的命令格式是一样的,故可以使用如下格式同一执行。
%.o :   %.c
    $(CC) -o $@ -c $<
    # -o 指定生成的文件名,-c 只编译不连接
    # $@ 指目标文件的名称,即main.o等
    # $< 指目标文件需要的依赖,即生成mian.o需要的main.c文件

.PHONY  : clean
clean:
    rm -f $(objs) test

PS:

  1. .PHONY:目标文件,指的是不生成实体文件,即“伪目标”,新版make中可写可不写
  2. 上述实例未体现预编译、头文件等管理

90. 附件下载

https://download.csdn.net/download/yujianliam/88228850

你可能感兴趣的:(#,PM,makefile)