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

文章目录

10. env

bash 复制代码
ubuntu=1804
GNU Make 4.1

20. 简述

百度百科

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

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

常用的自动化变量

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

30. 实例

bash 复制代码
# 指定编译器,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

相关推荐
fareast_mzh4 天前
redis: undefined reference to `log‘
redis·makefile
冉佳驹5 天前
Linux ——— sudo权限管理和GCC编译工具链的核心操作
linux·makefile·make·gcc·sudo·.phony
攻城狮7号6 天前
【AI时代速通QT】第十节:在 Windows 上配置vs和qmake环境手动编译 Qt 项目
windows·qt·makefile·visual studio·qmake·vcvarsall·nmake/jom
青云交12 天前
ShellCheck命令行工具适配开源鸿蒙PC实战指南
华为·开源·makefile·harmonyos·shellcheck·预编译二进制·hnp 打包
不知所云,15 天前
3. cmake 和 Ninja安装
驱动开发·makefile·make·构建工具·ninja
HalvmånEver1 个月前
Linux:基础开发工具(四)
linux·运维·服务器·开发语言·学习·makefile
Fcy6481 个月前
Linux下的项目自动化构建-make\makefile详解
linux·运维·自动化·makefile·make
边疆.1 个月前
【Linux】自动化构建工具make和Makefile和第一个系统程序—进度条
linux·运维·服务器·makefile·make
LostSpeed2 个月前
debug - MDK - arm-none-eabi - 从MDK工程做一个makefile工程出来
makefile·bat·mdk·arm-none-eabi
DebugKitty3 个月前
硬件开发2-ARM裸机开发1-I.MX6ULL - 汇编点灯
汇编·makefile·imax6ull·gpio·电路复用