跟我一起写makefile

一、makefile是什么

makefile是一个文件,它包含了一组规则用来指示make程序如何编译和链接程序。make是一个自动化编译工具,它可以通过读取makefile文件来查找依赖关系,自动编译程序。它可以在工程中进行模块化编译,只编译需要更新的文件,大大节省了编译时间。

二、makefile的语法

makefile的语法并不是很难,主要包括以下几个部分:

target1: depend1 depend2
    command1
    command2

target2: depend3 depend4
    command3
    command4

其中,target是要生成的目标文件,depend是目标文件所依赖的文件,command是生成目标文件的命令。

在makefile中,由于每个命令都是一个新的进程,因此每个命令都要以tab键开头,而不能使用空格。

三、makefile的实例

下面是一个简单的makefile实例:

CC = gcc
CFLAGS = -Wall -g

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

hello.o: hello.c
    $(CC) $(CFLAGS) -c hello.c

clean:
    rm -f hello hello.o

这个makefile包含了三个target:all、hello、clean

all是默认的target,当执行make命令时,会自动执行这个target下的命令。

hello是要生成的目标文件,它依赖于hello.o文件,当hello.o文件更新时,才会重新编译生成hello文件。

clean是为了清除中间文件而设置的target,执行make clean命令时,会删除生成的目标文件和中间文件。

四、makefile的高级用法

1、变量

在makefile中,可以定义变量来存储路径、编译选项等信息,方便统一管理和修改。

CC = gcc
CFLAGS = -Wall -g

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

hello.o: hello.c
    $(CC) $(CFLAGS) -c hello.c

clean:
    rm -f hello hello.o

在上面的makefile中,定义了两个变量:CC和CFLAGS。CC表示编译器路径,CFLAGS表示编译选项。

2、模式规则

模式规则可以使用变量来简化targets的规则写法,它允许多个目标文件使用相同的规则,只需要在规则中使用%表示模式匹配。

CC = gcc
CFLAGS = -Wall -g

all: hello

%o:%c
    $(CC) $(CFLAGS) -c $< -o $@

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

clean:
    rm -f hello *.o

在上面的makefile中,使用%o:%c表示所有以.o结尾的文件,都可以使用相同的规则来生成。

3、条件语句

在makefile中,可以使用条件语句,根据不同的条件执行不同的指令。

CC = gcc
CFLAGS = -Wall -g

ifdef DEBUG
    CFLAGS = -Wall -g -DDEBUG
endif

all: hello

hello: hello.o
    $(CC) $(CFLAGS) -o hello hello.o

hello.o: hello.c
    $(CC) $(CFLAGS) -c hello.c

clean:
    rm -f hello hello.o

在上面的makefile中,如果定义了DEBUG变量,则在编译时增加-DDEBUG选项。

五、总结

本文介绍了makefile的概念、语法和实例,以及makefile的高级用法。通过学习makefile的使用,可以更加高效地进行代码编译和管理。

原创文章,作者:NEWRP,如若转载,请注明出处:https://www.506064.com/n/372190.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NEWRPNEWRP
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相关推荐

  • makefile编写规则详解

    一、目标、依赖和命令 makefile中最基本的几个构成部分就是目标、依赖和命令。目标是我们要生成的文件,依赖是生成目标所需要的文件或者其他目标,命令则是生成目标的具体步骤。 ta…

    编程 2025-04-23
  • OpenWrt Makefile 全方位解析

    一、Makefile的定义和作用 1. Makefile是什么? Makefile是一个类似于脚本的文件,其中描述了如何通过编译器和链接器来生成应用程序。Makefile文件通常被…

    编程 2025-04-22
  • 深度解析makefile filter-out

    一、filter-out:什么是filter-out 在makefile中,filter-out函数是过滤掉一个列表中的某些元素。 filter-out函数的语法为: $(filt…

    编程 2025-04-12
  • makefile文件编写详解

    一、什么是makefile文件 makefile文件是用于自动化构建项目的工具,它可以根据指定的规则在一个或多个源文件的基础上生成目标文件。在makefile文件中,用户可以定义源…

    编程 2025-02-15
  • 深入探析makefile missing separator

    一、错误的解释 在Linux下,编译时常见的错误信息之一就是makefile missing separator,该错误信息常被误解为缺失了分隔符,导致编译错误。 实际上,这个错误…

    编程 2025-02-01
  • makefile 变量深入剖析

    一、makefile 变量概述 makefile 变量是一些被赋值的标识符(Identifier),它们用于储存各种用到的字符串或者数值。这些变量可以是自己定义的,也可以是系统默认…

    编程 2025-01-16
  • makefile 变量深入剖析

    一、makefile 变量概述 makefile 变量是一些被赋值的标识符(Identifier),它们用于储存各种用到的字符串或者数值。这些变量可以是自己定义的,也可以是系统默认…

    编程 2025-01-16
  • makefile注释详解

    一、makefile注释符 在makefile中,注释符为#。在#后面的内容都会被解释器忽略,即注释掉。 以下是一个示例,演示了如何使用注释符进行注释: # 这是一个makefil…

    编程 2025-01-02
  • makefile打印信息

    makefile是一个常用的自动化编译工具,通过定义文件依赖关系和构建规则,可以高效地构建软件。在makefile中,我们可以通过打印信息来帮助调试和了解构建过程中发生的情况。本文…

    编程 2024-12-19
  • Linux Makefile详细阐述

    一、基础介绍 Makefile是一个用于管理代码编译的脚本文件。它通过定义一系列编译规则和依赖关系,可以实现代码文件的自动编译和安装。Makefile是一个文本文件,文件名通常为“…

    编程 2024-12-12

发表回复

登录后才能评论