Makefile 简易教程

news/2024/11/22 0:01:28/

如果你是命令行重度使用者,学习 Makefile 将可以大大提高你的开发效率,下面简单介绍一下 Makefile 的知识和使用方式。

Makefile 是一种包含一组指令来编译和构建软件项目的文件。

Makefile 文件通常包含一组规则和依赖关系,以指定如何将源代码编译成可执行文件或库。

当执行 make 命令时,make 工具将解析 Makefile 文件,并根据定义的规则和依赖关系来执行所需的操作,以生成最终的目标文件。

Makefile 是一个常用的构建工具,尤其在 Unix 和 Linux 系统上广泛使用。

Makefile文件由一系列规则(rules)构成。每条规则的形式如下。

规则语法

target ... : prerequisites ...command...

上面第一行冒号前面的部分,叫做"目标"(target),冒号后面的部分叫做"前置条件"(prerequisites);

第二行必须由一个tab键起首,后面跟着"命令"(commands)。

"目标"是必需的,不可省略;"前置条件"和"命令"都是可选的,但是两者之中必须至少存在一个。

每条规则就明确两件事:构建目标的前置条件是什么,以及如何构建。

下面就详细讲解,每条规则的这三个组成部分。

示例文件

.PHONY: test #.PHONY 伪目标,代表无论 test 文件或目录是否存在都会执行 make test 命令
txt = Hello World #Makefile 允许使用等号自定义变量。all: clear test php #当执行 make 不带其他命令时,默认执行第一条python:-python vv #命令前加 - 代表执行错误继续执行下面的命令php -v #井号(#)在Makefile中表示注释。php:@php -v #正常情况下,make会打印每条命令,然后再执行,这就叫做回声(echoing)。在命令的前面加上@,就可以关闭回声。clear:cleartest:@echo $(txt) #使用变量@echo =============

这是一篇比较简洁的文章,希望可以让您对 Makefile 有一个基本了解。

Makefile 教程:https://seisman.github.io/how-to-write-makefile/index.html


http://www.ppmy.cn/news/70439.html

相关文章

Netty核心组件模块(一)

1.Bootstrap和ServerBootstrap 1>.Bootstrap意思是引导,一个Netty应用通常由一个Bootstrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap是服务端启动引导类; 2>.常见的方法有: ①.public ServerBootstr…

【笔试强训选择题】Day13.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…

spring项目里的大事务优化

编程型事务更加灵活 声明式事务只需要加在方法头加Transactional注解即可开启事务,但是还是不太灵活,意味着整个方法所进行对数据库操作都要加进事务,当然一次查询也要进入事务,这并不是我们想要的,我们在update、ins…

SpringMVC 执行流程

视图阶段(老旧JSP等) DispatcherServlet:接收请求、响应结果,所有的请求都要经过它,它是被Tomcat容器初始化的当这个类加载时会加载一些组件类HandlerMapping、HandlerAdapter、ViewResolver等等。 HandlerMapping:根…

mybatis-plus 自动填充的时间跟真实时间相差8小时

项目中 用到了以下两个字段,分别是插入数据时间和更新数据时间,用的mybatis-plus自动填充,结果发现填充的时间跟真实时间相差很多。查了一些资料,找到了解决方案: 1. 下图是我的mysql没有进行配置之前的时区配置,这里的CST包括了4个时区,分别…

泛型类和泛型类是并列的关系

package com.test.test05;import java.util.ArrayList;class Demo{public static void main(String[] args) {Object obj new Object();String s new String();obj s; //多态的一种形式Object[] objArr new Object[10];Object[] strArr new String[10];objArr st…

一种基于非均匀分簇和建立簇间路由的算法的无线传感器网络路由协议(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本文准备了一种路由方法,该方法使传感器通过有效地使用能量将数据从发送方加载到接收器,因为它在 LEAC…

修为 - 人生感悟

人不为己,天诛地灭。 说明一下,上面说的为己,指的是人的修为。 一个人,在成年之后,需要不断的对自己进行修为的提高。在经历了世事之后,对人生的感悟要不断地进行总结,提高自己的修为。 老祖宗给…