跟我学Makefile(二)

跟我学Makefile(二)

在上一篇跟我学Makefile中,我们学习了一些基础的Makefile语法和命令。在本文中,我们将继续深入了解如何使用Makefile自动化构建我们的代码。

变量

Makefile支持定义变量,可以提高代码的复用性和可维护性。变量可以用于定义命令、文件列表等。

变量的定义格式是变量名 = 值。例如:

CC = gcc
CFLAGS = -Wall -O2

可以用$()${}使用变量。例如:

$(CC) $(CFLAGS) -o main main.c

函数

Makefile支持多种内置函数,可以用于字符串操作、文件操作等。

一些常用函数:

  • shell: 执行shell命令并返回结果。

  • foreach: 遍历一个列表并执行命令。

  • wildcard: 列出符合某种模式的文件列表。

  • notdir: 返回去掉目录部分的文件名。

  • subst: 用一个字符串替换另一个字符串。

  • strip: 去掉字符串中的空格。

  • patsubst: 将符合某种模式的文件名替换为另一种模式。

我们可以用函数来定义变量、执行命令等。例如:

SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

target: $(OBJS)
    $(CC) $(CFLAGS) -o target $(OBJS)

命令

在Makefile中可以定义一组命令,用于构建、清理代码等。一个命令通常包括若干行shell命令。

命令的格式是:

target: dependencies
    command

其中target是一个目标,dependencies是依赖项,command是命令。例如:

target: a.o b.o
    $(CC) $(CFLAGS) -o target a.o b.o

Makefile会自动根据依赖关系确定构建顺序。

实战

我们来看一个示例,用Makefile编译一个C程序,并支持单元测试。

CC = gcc
CFLAGS = -Wall -O2
LDFLAGS = -lm
TEST_FLAGS = -lcunit

SRCS = main.c math.c
OBJS = $(patsubst %.c, %.o, $(SRCS))

test: test_math
    ./test_math

test_math: math.o test_math.c
    $(CC) $(CFLAGS) $(TEST_FLAGS) -o test_math math.o test_math.c

$(OBJS): $(SRCS)
    $(CC) $(CFLAGS) -c $(SRCS)

clean:
    rm -f $(OBJS) test_math

在这个Makefile中,我们定义了四个目标:

  • test: 运行单元测试。

  • test_math: 编译单元测试程序。

  • $(OBJS): 编译目标程序。

  • clean: 清理编译产生的文件。

test_math依赖于math.otest_math.c,执行命令来构建单元测试程序。

$(OBJS)依赖于$(SRCS),执行命令来编译目标程序。

clean只是执行命令清理编译产生的文件。

我们可以使用make命令来构建代码和运行单元测试。

总结

本文介绍了Makefile中的变量、函数和命令以及如何通过它们来自动化构建代码。通过Makefile可以实现自动化、可重复、可维护的代码构建流程,提高代码质量和开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟我学Makefile(二) - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • android应用框架-volley网络通信框架

    以下是关于“Android应用框架-Volley网络通信框架”的完整攻略,包括定义、特点、使用方法、示例说明和注意事项。 定义 Volley是一款由Google开发的Android网络通信框架,可以帮助开发者快速、便地进行网络通信。Volley支持HTTP请求、图片加载、JSON解析等功能,具有高效、简单可定制等特点。 特点 Volley的特点包括: 高效:…

    other 2023年5月8日
    00
  • win 10系统无法激活及自动重启怎么办?

    Win 10系统无法激活及自动重启的处理方法 无法激活Win 10系统 1. 检查网络连接 无法激活Win 10系统经常与网络连接问题有关,因此,首先请检查网络连接是否正常。可以尝试连接其他网络或通过重启路由器来解决问题。 2. 尝试手动激活 如果无法激活Win 10系统,可以尝试手动激活。具体操作如下: 点击开始菜单,选择“设置”; 点击“更新和安全”; …

    other 2023年6月27日
    00
  • Android四大组件之Service服务详细讲解

    Android四大组件之Service服务详细讲解 什么是Service? Service是Android四大组件之一,它是在后台执行操作的组件,可以在不受用户干扰的情况下长时间运行。Service通常用于执行诸如下载、上传数据、播放音乐等耗时操作。 Service的分类 前台服务:与用户正在进行交互的Activity或者其他前台组件有关的服务。此类服务需要…

    other 2023年6月27日
    00
  • win10系统怎么配置maven环境变量?

    当在Win10系统上进行Java开发时,需要使用Maven来管理项目依赖包,因此需要配置Maven的环境变量。 以下是配置Maven环境变量的步骤: 第一步:下载Maven 下载Maven压缩包,官方网站地址为:https://maven.apache.org/download.cgi 选择下载适合本机操作系统的Maven版本,本篇文档以Maven 3.8.…

    other 2023年6月27日
    00
  • 最全面的Android Studio使用教程(图文)

    很抱歉,作为一个文本模型,我无法提供完整的图文教程。然而,我可以为您提供一些关于Android Studio使用的基本指导和示例说明。请注意,以下内容是以纯文本形式提供的,没有图像或图文。 Android Studio使用教程 1. 安装Android Studio 首先,您需要下载并安装Android Studio。您可以从官方网站上下载适用于您的操作系统…

    other 2023年7月27日
    00
  • Apache Web 服务器的安装配置方法

    Apache Web 服务器的安装配置方法 安装和配置 Apache Web 服务器的基本方法 下载 Apache Web 服务器 前往官网 https://httpd.apache.org/ 下载最新版本的 Apache Web 服务器 解压缩下载后得到的压缩包 安装编译器和必要的软件 在 Linux 系统下,需要安装 gcc、make 和 apr-uti…

    other 2023年6月25日
    00
  • win7下的两台电脑复制文件时提示文件夹名称过长

    当我们在Win7下的两台电脑复制文件时,可能会遇到“文件夹名称过长”的提示。这是因为Windows系统在处理文件名称时,有一定的限制,单个文件或文件夹的名称不能超过255个字符。 解决这个问题的方法是使用一些工具或方法来缩短文件夹名称。以下是一些可行的方法: 1. 使用WinRAR压缩文件夹 步骤: 右键点击需要复制的文件夹,选择“添加到压缩文件”。 在弹出…

    other 2023年6月26日
    00
  • JavaScript String(字符串)对象的简单实例(推荐)

    下面是 “JavaScript String(字符串)对象的简单实例(推荐)” 的完整攻略。 1. 简介 JavaScript的String(字符串)对象表示一个字符序列。JavaScript字符串是不可变的。这意味着一旦字符串被创建,无法修改它们。但是,我们可以通过一些操作来改变字符串,比如拼接、替换和提取等。 2. 创建字符串对象 在JavaScript…

    other 2023年6月20日
    00
合作推广
合作推广
分享本页
返回顶部