Makefile的简单使用方法(不详细)

概述

  • Makefile是类似于shell的一种脚本文件,其描述了整个工程所有文件的编译顺序、编译规则,实现了“自动化编译”的效果,免去了手动编译时带来的麻烦,且在Makefile中可以使用系统shell所提供的任何命令来完成想要的工作。

  • make是一个命令工具,它为Makefile脚本文件进行解释。当make 命令被执行时,它会扫描当前目录下Makefile找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描Makefile 建立其依赖关系,然后编译它们。

  • Makefile文件可以使用“GNUmakefile”,“makefile”,“Makefile”命名,make命令执行时根据此命名的查找顺序,首先找到那个就读取那个。

  • C语言编译过程简图
    在这里插入图片描述

Makefile的规则

  • Makefile脚本格式

    目标文件 : 依赖文件
    [Tab]命令
    
  • 依赖文件即是生成目标文件所需要的文件,目标文件不存在依赖文件比目标文件新时执行命令(任意的shell命令)。

  • 命令前有一个[Tab]的缩进

示例

  • 把a.c,b.c,c.c三个源文件编译成test程序:
  1. 在工程目录下创建Makefile文件

    $ ls
    a.c  b.c  c.c  Makefile
    
  2. 编写Makefile文件

    test : a.o b.o c.o
    	gcc a.o b.o c.o -o test
    a.o : a.c
    	gcc -c a.c -o a.o
    b.o : b.c
    	gcc -c b.c -o b.o
    c.o : c.c
    	gcc -c c.c -o c.o
    
    
  3. 执行make命令(当有多个目标时,只用make默认执行第一个)

    $ make
    gcc -c a.c -o a.o
    gcc -c b.c -o b.o
    gcc -c c.c -o c.o
    gcc a.o b.o c.o -o test
    $ ls
    a.c  a.o  b.c  b.o  c.c  c.o  Makefile  test
    
  • Makefile文件中可以使用通配符% *,且在编译过程中生成了很多.o文件,可以使用clean清除,上面的Makefile可简写:

    test : a.o b.o c.o
    	gcc $^ -o test
    %.o : %.c
    	gcc -c $< -o $@
    
    clean :
    	rm *.o test
    .PHONY: clean
    
  • 使用rm *.o可执行文件名 ,在终端输入make clean命令就可以自动清除。

  • 在clean前面加.PHONY意为把clean设为伪目标,避免了与名为clean的文件的冲突(当使用make命令行指定此目标时,这个目标所在规则定义的命令、无论目标文件是否存在都会被无条件执行)

  • $@表示目标

  • $<表示第一个依赖文件

  • $^表示所有依赖文件

变量

符号说明

  • "=" 延时变量,在引用时才展开
  • ":=" 及时变量,在定义时就直接展开,不能引用之后定义的变量。如果引用一个未定义的变量,则为空
  • "?=" 表示如果此变量在之前没有定义,就赋值,否则保持原值
  • "+=" 追加方式来实现对一个变量值的追加操作

示例

A := $(C)                # $()的方式引用变量
B = $(C)
C = abc
D = nb666
D ?= 2333

all:
	@echo A = $(A)		# 命令前面加@不打印该命令
	@echo B = $(B)
	echo D = $(D)        
	
C += 123

  • 执行
$ make
A =
B = abc 123
echo D = nb666
D = nb666

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Makefile 是一个用于管理和自动化软件项目中的编译和构建过程的工具。通过 Makefile,可以定义一系列规则和依赖关系,告诉计算机如何构建和更新项目。 以下是 Makefile 的基本使用方法: 1. 创建一个名为 "Makefile" 或 "makefile" 的文件,并将其放置在项目根目录下。 2. 在 Makefile 中定义规则。每个规则由以下几部分组成: - 目标(Target):规定了要生成的文件或执行的操作。 - 依赖(Dependencies):规定了生成目标所需要的文件或操作。 - 命令(Command):规定了生成目标的具体操作。 例如,下面是一个简单Makefile 示例: ```makefile target: dependency1 dependency2 command1 command2 ``` 3. 定义规则后,可以在命令行中使用 `make` 命令执行 Makefile 中的规则。例如,要执行上述示例中的目标 `target`,可以运行命令: ``` make target ``` 4. Makefile 还提供了一些特殊的变量和函数,可以用于更灵活地定义规则。一些常用的变量包括: - `CC`:C 编译器的名称。 - `CFLAGS`:编译选项。 - `LDFLAGS`:链接选项。 - `SRC`:源文件列表。 - `OBJ`:目标文件列表。 - `BIN`:生成的可执行文件名。 你可以在规则中使用这些变量,例如: ```makefile CC = gcc CFLAGS = -Wall -O2 target: $(OBJ) $(CC) $(LDFLAGS) -o $(BIN) $(OBJ) %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ ``` 这是 Makefile 的基本使用方法,通过定义规则和使用 make 命令,你可以自动化编译和构建项目。更复杂的项目可能需要更详细Makefile 配置,你可以查阅相关文档来深入了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

money的大雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值