2.4 Makefile中使用变量

Variables Make Makefiles Simpler

一、本节概要

Variables Make Makefiles Simpler (变量使Makefile更简单),以下是官方给出的原文,接下来会对本节内容进行拆解,并给出详细示例代码。

In our example, we had to list all the object files twice in the rule for edit (repeated here):
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.oSuch duplication is error-prone; if a new object file is added to the system, we might
add it to one list and forget the other. We can eliminate the risk and simplify the makefile
by using a variable. Variables allow a text string to be defined once and substituted in
multiple places later (see Chapter 6 [How to Use Variables], page 65).
It is standard practice for every makefile to have a variable named objects, OBJECTS,
objs, OBJS, obj, or OBJ which is a list of all object file names. We would define such a
variable objects with a line like this in the makefile:
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
Then, each place we want to put a list of the object file names, we can substitute the
variable’s value by writing ‘$(objects)’ (see Chapter 6 [How to Use Variables], page 65).
Here is how the complete simple makefile looks when you use a variable for the object
files:Chapter 2: An Introduction to Makefiles
7
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit $(objects)

二 、Makefile中使用变量

2.1 未使用变量时的Makefile

在未使用变量时,我们需要手动写出每一个依赖的文件名(在目标后面的依赖中、编译选项后面、清理项等),但是这样很麻烦,因为我们可以使用一个变量去定义所有的文件名,而在使用的时候我们只需要给出变量名即可,这样就不需要在多处重复写入文件名。

# 目标文件
edit : main.o add.o sub.o multiply.o divide.occ -o edit main.o add.o sub.o multiply.o divide.o# 规则定义
main.o : main.c main.hcc -c main.cadd.o : add.c main.hcc -c add.csub.o : sub.c main.hcc -c sub.cmultiply.o : multiply.c main.hcc -c multiply.cdivide.o : divide.c main.hcc -c divide.c# 清理命令
clean :rm -f edit main.o add.o sub.o multiply.o divide.o

2.2 定义变量时的Makefile

如下,我们使用变量objects 包含了所有文件名,而在使用的时候我们直接给出这个变量名即可替代那些文件名,不需要重复填写,非常方便。

# 定义变量
objects = main.o add.o sub.o multiply.o divide.o# 目标文件
edit : $(objects)cc -o edit $(objects)# 规则定义
main.o : main.c main.hcc -c main.cadd.o : add.c main.hcc -c add.csub.o : sub.c main.hcc -c sub.cmultiply.o : multiply.c main.hcc -c multiply.cdivide.o : divide.c main.hcc -c divide.c# 清理命令
clean :rm -f edit $(objects)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这方法真牛B!论文降重从81%直降1.9%

目录 一、万字论文,从0到1,只需1小时二、获取途径三、论文从81%降到1.9%四、内容是别人的,话是自己的五、AI工具 --> 中文论文降重六、论文降重小技巧 一、万字论文,从0到1,只需1小时 通过O…

Python-3.12.0文档解读-内置函数map()详细说明+记忆策略+常用场景+巧妙用法+综合技巧

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 详细说明 map(function, iterable, *iterables) 参数 返回值 示例 注意事项 参考…

Java练习1

题目要求 有一个交通工具接口类Vehicles,有work接口有Horse类和Boat类分别实现Vehicles创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat有Person类,有name和Vehicles属性,在构造器中为两个属性赋值实例化Person对象“…

如何让大模型更聪明?提升AI智能的关键策略

如何让大模型更聪明?提升AI智能的关键策略 🤖 如何让大模型更聪明?提升AI智能的关键策略摘要引言方向一:算法创新🚀1.1 自监督学习的崛起1.2 强化学习的应用 方向二:数据质量与多样性📊2.1 数据…

大模型日报2024-05-26

大模型日报 2024-05-26 大模型资讯 AI助力揭示海洋和肠道中的病毒活动 摘要: 病毒在微生物生态系统中是神秘且难以理解的力量。研究人员发现,病毒可以感染、杀死并操控人类。AI技术有望帮助我们更好地了解这些病毒在海洋和肠道中的行为。 微软推出Windows Copilot R…

Spring:IoC容器(基于XML管理bean)

1. HelloWorld 三个步骤: 1.创建类 2.配置xml文件 3.通过xml文件使得bean实列化 1. 创建类 package com.itgyl.bean;public class HelloWorld {public HelloWorld() {System.out.println("1.通过无参构造创建对象");}public void hello() {System.out.p…

SpringCloud配置文件bootstrap不生效

解决方案&#xff1a; 情况一、SpringBoot 版本 小于 2.4.0 版本&#xff0c;添加以下依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-context</artifactId> </dependency> 情况二、SpringBoot…

乡村振兴的乡村公共服务提升:提升乡村公共服务水平,满足农民多样化需求,构建幸福美好的美丽乡村

目录 一、引言 二、乡村公共服务提升的必要性 &#xff08;一&#xff09;满足农民多样化需求 &#xff08;二&#xff09;促进乡村经济发展 &#xff08;三&#xff09;构建幸福美好的美丽乡村 三、乡村公共服务面临的挑战 &#xff08;一&#xff09;基础设施薄弱 &a…

粘土滤镜特效怎么弄?5个简易制作粘土软件一学就会

#是谁把夏天的氛围感拿捏了#&#xff0c;哦~原来是AI粘土特效。 这玩意儿最近在社交媒体上可是火得一塌糊涂&#xff0c;大家都在用它给自己的照片来个大变身&#xff0c;变成那种丑萌丑萌的粘土小人儿。 如果大家也想尝试一下&#xff0c;那就跟着我来看看几款超好用的粘土滤…

java处理中文脱敏

方法一&#xff0c;简单的&#xff0c;不计算文字长度去设置脱敏 public static String dataDesensitization1(String content){String regex "(.{2}).*(.{2})";return ReUtil.replaceAll(content, regex, matcher -> {try {if (CharSequenceUtil.isBlank(match…

基于Django框架的项目搭建后台首页

(1). 创建数据库 osdb 进入MySQL数据库中&#xff0c;创建一个数据库名为&#xff1a;osdb 通过数据表结构来创建数据表&#xff1a; -- 员工信息表 CREATE TABLE user (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 员工账号id,username varchar(50) DEFAULT NULL C…

MySQL:图文超详细教程MySQL5.7下载与安装

一、前言 MySQL 5.7 是一个重要的数据库管理系统版本&#xff0c;它带来了多项改进和新特性&#xff0c;本文将超详细的带大家手动安装一下MySQL5.7。 二、下载MySQL5.7版本 MySQL5.7安装包 链接&#xff1a;https://pan.baidu.com/s/1lz5rp9PwfyeHzkEfI_lW6A 提取码&#…

图卷积神经网络的简史 及其与卷积神经网络的异同

图卷积神经网络&#xff08;GCN&#xff09;已经在处理图结构数据方面取得了巨大的成功。在本小节中&#xff0c;我们将深入探讨图卷积神经网络的起源、发展历程&#xff0c;并提供一个简单的Python代码实现示例&#xff0c;以帮助读者更好地理解这一概念。 图卷积神经网络的简…

Kubernetes 文档 / 概念 / 服务、负载均衡和联网

Kubernetes 文档 / 概念 / 服务、负载均衡和联网 此文档从 Kubernetes 官网摘录 中文地址 英文地址 Kubernetes 网络模型 集群中每一个 Pod 都会获得自己的、 独一无二的 IP 地址&#xff0c; 这就意味着你不需要显式地在 Pod 之间创建链接&#xff0c;你几乎不需要处理容器…

Django 请求方式

在 Django 中要想知道请求方式&#xff0c;可以在views.py文件里获知。views.py 是在自己创建的app文件夹里的 from django.shortcuts import redirectdef login(request):# 获取请求方式 GET/POSTprint(request.method)# 获取url中的参数&#xff1a;/login/?n1123&n2…

深入理解 Docker:概念、原理与操作指南

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI Docker 简介、原理及操作 Docker 是一个开源的容器化平台&#xff0c;它可以将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;从而实现应用程序的快速部署、运行和管理。本文…

c# 贪心算法(Greedy Algo)

贪婪是一种算法范式&#xff0c;它逐步构建解决方案&#xff0c;始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性&#xff0c;则可以使用贪心法解决优化问题&#xff1a; 每一步&#xff0c;我们都可以做出当前看来最好的选择&…

IDEA 2024.1安装与破解

一、下载 官网地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 二、安装 傻瓜式安装即可 三、破解 3.1 破解程序 网站&#xff1a;https://3.jetbra.in/ 3.2 获取激活码 点击*号部分即可复制成功

python纸牌塔游戏

下面是一个简单的Python实现的纸牌塔游戏的示例代码。这个游戏是基于简单的图形用户界面和命令行界面。 import random import sys import time # 定义游戏中的卡片数量 CARD_COUNT 52 # 定义游戏中的牌堆数量 DECK_COUNT 4 # 定义游戏中的卡片等级 RANKS [A, 2, 3…