Makefile路径处理:执行路径、绝对路径与相对路径的处理

news2024/11/19 3:30:13

问题描述

  • 最近编写了一个 编译设备树 的 Makefile,遇到了使用 make -f xx/Makefile,执行路径变了,造成 Makefile 里面的一些操作路径不正确,无法执行

获取当前目录

  • make 内置的 $(CURDIR),可以把当前路径的全路径打印出来

  • 注意:如果执行其他路径下的Makefile,这个 $(CURDIR) 打印出来的是 执行的路径,而不是 Makefile 所在的路径

  • 测试代码

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
cur_makefile_path := $(dir $(mkfile_path))

DIR_ROOT := $(cur_makefile_path)

CUR_ROOT := $(CURDIR)

All:
        echo $(DIR_ROOT)
        echo $(CUR_ROOT)
  • 对比 Makefile 的路径,$(CURDIR) 打印的是 执行的路径

在这里插入图片描述

获取 Makefile 的路径

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
cur_makefile_path := $(dir $(mkfile_path))

这里的 $(cur_makefile_path) 不会因为在不同的路径下执行,就会错乱,验证如下

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
cur_makefile_path := $(dir $(mkfile_path))

DIR_ROOT := $(cur_makefile_path)

All:
        echo $(DIR_ROOT)
  • 测试效果:

  • 注意当前路径下有 Makefile 文件,可以直接 make, 也可以 make -f Makefile

  • 执行其他路径下的 Makefile,可以使用 $ make -f make_demo/make_01/Makefile,也就是 $ make -f Makefile路径 后面加上 Makefile 的路径

在这里插入图片描述

执行路径

也就是输入 make 命令的路径,这个可以使用 $(CURDIR) 打印出来

相对路径

  • 这里最好拿到 Makefile 所在的路径,然后再拼接 Makefile 所在路径

  • 示例:执行 Makefile 当前路径下 dtc/dtc 工具

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
cur_makefile_path := $(dir $(mkfile_path))

DIR_ROOT := $(cur_makefile_path)
HOST_DTC := $(DIR_ROOT)dtc/dtc
  • 以上的 DIR_ROOT 不可以使用 $(CURDIR) 或者 . 来实现,否则执行路径不同,就无法正确的执行

小结

  • 注意 Makefile 的路径,一般需要或者 Makefile 所在的绝对路径,而不是 当前路径,如果执行其他目录的,最好先获取 Makefile 绝对路径,再拼接相对路径

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

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

相关文章

Three.js--》实现图片转3D效果展示

目录 项目搭建 初始化three.js基础代码 加载图片纹理 设置着色器 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目中才能灵活将所学知识运用起来,话不多说直接开始。 项目搭建 本案例还是借助框架书写th…

逻辑推理与集合

逻辑推理与集合是同一个过程的不同展示方式,这两者具有不同的特点。 逻辑推理通常是一种思维过程、语言文本的形式。 而集合则很容易采用一种可视化的方式进行展示,并且集合很容易进行交集、并集、补集、差集等计算。 把语言的逻辑推理过程转换为集合…

0602-指针和数组

数组名 数组名是一个地址常量,不允许赋值。它表示数组首元素的地址。 指针操作数组元素 指针访问数组 指针类型变量\常量1等同于指针保存的内存地址sizeof(指针指向的数据类型)。 2个相同类型的指针相减,得到的结果是2个指针的偏移量。其中偏移单位…

STL模型转有限元网格

随着计算机图形学、硬件和3D打印技术的发展,基于曲面三角网格的图形渲染及其文件格式越来越流行。 在有限元分析(FEA)中,工程师有时会得到基于三角形网格的几何文件(如STL文件等)并进行后续分析。 由于曲面…

华为OD机试真题 Java 实现【检查是否存在满足条件的数字组合】【2022Q4 100分】

一、题目描述 给定一个正整数数组,检查数组中是否存在满足规则的数字组合 规则:A B 2C 二、输入描述 第一行输出数组的元素个数。 接下来一行输出所有数组元素,用空格隔开。 三、输出描述 如果存在满足要求的数,在同一行…

【MySQL】不允许你不会SQL语句之DDL

目录 前言: 一.DDL数据库语句 1.1语句讲解 1.2总结 二.DDL表语句 2.1语句讲解 2.2总结 三.DDL字段语句 3.1语句讲解 3.2总结 四.MySQL数据类型 五.结尾 前言: 在从零到一入门MySQL一篇中,我们对数据库已经有了一定的了解&#xf…

Linux 设备树手动反编译 dtb 生成 源文件dts

验证平台 win10 64 位 VMware Workstation Pro 16 ubuntu 20.04 dtc 工具: 来自 linux-6.3.5 中的 scripts/dtc/ 安装 dtc 工具 其实可以通过安装 dtc 软件包,但不建议这么做,最好通过编译Linux 最新的内核,获取这个 dtc 工具…

利用Web Serial API实现Vue与单片机串口通信

一、Web Serial API介绍 Web Serial API 是一项 Web 技术,用于在浏览器中访问串行端口设备(如 Arduino、传感器等)并与之通信。它提供了一组 JavaScript 接口,使得 Web 应用程序可以通过 USB 串行端口连接到硬件设备,并…

华为OD机试真题 Java 实现【报数游戏】【2022Q4 100分】

一、题目描述 100个人围成一圈,每个人有一个编码,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始报数,直到剩余的人数小于M。请问最后剩余的人在原先的编号为多少&#xff…

【JavaSE】Java基础语法(四十五):TCP UDP 全解

文章目录 1. TCP发送数据2. TCP接收数据【应用】3. TCP程序练习4. TCP程序文件上传练习【应用】5. UDP发送数据6. UDP接收数据【应用】7. UDP通信程序练习【应用】8. UDP三种通讯方式 1. TCP发送数据 Java中的TCP通信 Java对基于TCP协议的的网络提供了良好的封装,使…

chatgpt赋能python:Python删除文件目录

Python删除文件目录 Python是一种高级编程语言,广泛应用于开发各种类型的应用程序。Python的许多功能使其成为开发者的首选编程语言之一。在这篇文章中,我们将讨论如何使用Python删除文件和目录。 文件和目录的区别 在开始之前,让我们了解…

16_Linux内核启动流程

目录 链接脚本vmlinux.Ids Linux内核入口stext mmap_switched函数 start_kernel函数 rest_init函数 init进程 链接脚本vmlinux.Ids 要分析Linux启动流程,同样需要先编译一下Linux源码,因为有很多文件是需要编译才会生成的。首先分析Linux内核的连接脚本文件arch/arm/kem…

【Python】Python系列教程-- Python3 字符串(十一)

文章目录 前言Python3 字符串Python 访问字符串中的值Python 字符串更新Python 转义字符Python 字符串运算符Python 字符串格式化Python三引号f-stringUnicode 字符串Python 的字符串内建函数 前言 往期回顾: Python系列教程–Python3介绍(一&#xff…

计算机网络-网络层1.0

传输单位 网络层将分组从源端传到目的端,为分组交换网上的不同主机提供通信服务,传输单位为数据报 路由器 完成路由选择和分组转发 路由选择:按照分布式算法,根据从相邻路由器所得到的的关于整个网络拓扑的变化情况&#xff0…

操作系统第二章​练习题

第一部分 教材习题(P84) 1、什么是前趋图?为什么要引入前趋图?​ 前趋图:是用于描述程序段或进程之间执行的先后顺序的有向无循环图。 引入的原因:为了更好的描述程序的顺序和并发执行的情况。 试画出下面4条语句的前趋图&#…

LeetCode 2559 统计范围内的元音字符串数

LeetCode 2559 统计范围内的元音字符串数 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/count-vowel-strings-in-ranges/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目:…

Vue3小兔鲜:组合式写法入门

Vue3&#xff1a;组合式写法入门 Date: May 11, 2023 认识Vue3 1. Vue3组合式API体验 通过 Counter 案例 体验Vue3新引入的组合式API <script> export default {data(){return {count:0}},methods:{addCount(){this.count}} } </script><script setup> imp…

【JavaSE】Java基础语法(四十四):XML解析

文章目录 1. 概述2.标签的规则3. 语法规则【应用】4. xml解析【应用】 1. 概述 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域…

【分布族谱】高斯分布和逆高斯分布的关系

文章目录 高斯分布逆高斯分布简介通过高斯分布构造逆高斯分布 高斯分布 正态分布&#xff0c;又称Gauss分布&#xff0c;其概率密度函数入下图所示 正态分布 N ( μ , σ ) N(\mu, \sigma) N(μ,σ)受到期望 μ \mu μ和方差 σ 2 \sigma^2 σ2的调控&#xff0c;其概率密度函…

基于SpringBoot+Vue的医疗服务系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…