linux内核学习(7)粗略走走kbuild Makefile编译流程

2023-11-20

 今天看Makefile文件,我头大了,此Makefile非彼Makefile,里面多了很多内置命令,比如origin、patsubst等等啦,这些都没听说过,更可恶的是,连网上都没有,可见,这是一件多么伤人的事情,分析这样的,真是让人折寿啊!没办法,大半天都没找出个头绪来,于是我也没什么办法了,只好利用跟踪的分析方法,就是按照安装的步骤来,通过make命令来找到突破口。这种方法的确好使。没用多久,我就稍微有了点头绪,也算今天没白白浪费掉。

先来个“make menuconfig”,这个内核编译的第一步,配置内核。因此我打开Makefile文件,查找目标--menuconfig,我操,怎么会没有,这是算是一个坎吧,怎么办呢,得想法子啊,我操,那换个,"config",我日啊,找了好长时间,发现有两个目标,很不容易。
config: scripts_basic outputmakefile FORCE
    $(Q)mkdir -p include/linux include/config
    $(Q)$(MAKE) $(build)=scripts/kconfig $@

%config: scripts_basic outputmakefile FORCE
    $(Q)mkdir -p include/linux include/config
    $(Q)$(MAKE) $(build)=scripts/kconfig $@


“%config”这是什么,没错,有点常识的都知道,一个匹配而已,真的算运气到位啊。如果是第一次执行这个肯定会找目标“script_basic”,在哪里,同样查找一下。
PHONY += scripts_basic
scripts_basic:
    $(Q)$(MAKE) $(build)=scripts/basic
    $(Q)rm -f .tmp_quiet_recordmcount


这个目标没有依赖关系,那么肯定每次都得执行一遍,来了,“$(Q)”是什么,查找。
ifeq ($(KBUILD_VERBOSE),1)
  quiet =
  Q =
else
  quiet=quiet_
  Q = @
endif


看到没有,其实就是为空或者"@",如果熟悉Makefile语法就知道,在指令前加上它,表示执行时,不打印

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux内核学习(7)粗略走走kbuild Makefile编译流程 的相关文章

  • win-7 cmd 上的 GNU awk,不会将输出重定向到文件

    如果相关的话 我直接从sourceforge中的GNU指向源下载了GNU awk V 3 1 6 我正在使用 Windows 版 wget 获取 URL 页面 处理传入的文件后 我将其减少为单行 我必须从中提取一个键值 这是一个相当长的字符
  • 在 makefile 中,目录名是假目标还是“真实”目标?

    根据我所读到的有关 makefile 的内容 虚假目标是指与实际文件名不对应的任何目标 我的直觉表明 作为目标的目录将被视为与文件相同 为什么这很重要 我的 makefile 中有一个目录作为目标 当我将其作为主要可执行文件的先决条件时 无
  • 如果单元测试失败则 make 失败

    我有一个用于编译静态库的 makefile 该生成文件具有编译与静态库关联的单元测试套件的规则 编译测试套件后 将调用 python 脚本来运行测试并记录结果 它看起来像这样 unit MAKE C cXbase unit python T
  • 是否有从 Maven 到 Bazel 的迁移路径?

    现在巴泽尔 http bazel io http bazel io 已经开源了 是否有一个增量过程可以让我逐渐从 Maven 迁移 一个大型存储库 到 Bazel 我在研究巴泽尔 不 据我们所知 没有这样的过程 我希望 我们一直在运行一些从
  • Swift - 将数组写入文本文件

    我从一个包含几千行纯文本的文件中读入 myArray 原生 Swift myData String stringWithContentsOfFile myPath encoding NSUTF8StringEncoding error ni
  • IntelliJ:“构建”>“重建项目”菜单项与 Maven 全新安装

    For a Maven https en wikipedia org wiki Apache Maven驱动的项目IntelliJ https en wikipedia org wiki IntelliJ IDEA2018年 我该选择什么时
  • ant命令不生成apk文件

    我正在使用 Ant 构建我的应用程序 我的应用程序使用库项目 所以首先我在命令行中运行以下命令以在我的项目中生成 build xml 安卓更新 项目 target 5 p 我的项目路径 l 我的库项目路径 我的应用程序的构建目标是 4 0
  • 如何在 Windows 上通过 Vim 使用 MinGW make

    我已经在我的机器上安装了 Vim 和 MinGW 所以我尝试创建 Hello World 然后在 Vim 中编译 一切正常 但是当我输入时 make它显示错误 make not recognized as an internal or ex
  • sbt (play!) 项目与 Maven 父 pom 的集成

    我有一个 Maven 项目 其中包含围绕父 pom 组织的多个 Maven 模块 所有这些模块都打包成 JAR 文件 这些文件是我的 Play 的依赖项 作为 SBT 项目构建的应用程序 MyProject gt pom xml paren
  • 如何在 Windows 上安装 Boost.Build?

    http www boost org boost build2 doc html bbv2 installation html http www boost org boost build2 doc html bbv2 installati
  • 链接器输入文件未使用的 c++ g++ make 文件

    我无法弄清楚是什么导致了我在制作项目时不断遇到的错误 i686 apple darwin11 llvm g 4 2 lncurses linker input file unused because linking not done 我的
  • 如何在 Mac 上使用 Emscripten emcc 和 make 时包含 ncurses

    我正在尝试构建一个项目 即 Angband 的源代码 http rephial org downloads 3 3 angband v3 3 2 tar gz http rephial org downloads 3 3 angband v
  • Fortran:向文件添加列(即跳过不同数量的水平空格)

    我是 Fortran f90 的初学者 一些看似简单的问题结果却导致严重头痛 感谢您帮助我解决这个问题 我的代码运行一个循环 处理数据并将它们写入文件 我希望将这些数据写入同一文件的列中 直到循环完成 OPEN unit 11 file f
  • 单个构建步骤的 TeamCity 构建日志

    当 teamcity 执行 MSBuild 步骤时 构建日志具有可折叠 可扩展的层次结构 我有一个很大的构建步骤 它运行一个 powershell 脚本 生成的构建日志很大 需要很长时间才能加载 有没有一种方法可以让 teamcity 将单
  • Ant 任务:使用排除参数

    得到以下 build xml 字符串
  • 如何在 GNU Make 的定义中使用 ifeq?

    我正在尝试在 Makefile 中的定义内执行 ifeq 但我似乎遇到了一些错误 并且我想知道是否遗漏了某些内容 我有以下 Makefile info start ifeq X Y info DOES not appear 1 endif
  • Android.mk 与 Application.mk

    我对 Android mk 和 Application mk 的使用有点模糊 我尝试阅读 APPLICATION MK HTML ANDROID MK HTML 在NDK 附带的文档 http developer android com s
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 指定共享对象(共享库)的名称

    Go 编译器为共享对象生成的名称是错误的 例子 go install buildmode shared linkshared github com apache thrift lib go thrift code google com p
  • 如何将Matlab命令的输出重定向到文件? [复制]

    这个问题在这里已经有答案了 我想将 Matlab 命令的输出重定向或复制到文件中 我怎样才能做到这一点 就我而言 我想使用 UNIX 工具比较两个大型结构diff 示例 我可以在 Matlab 中执行此操作 gt gt s1 s1 a 32

随机推荐

  • HDFS常用命令

    1 hdfs dfs与hadoop fs 命令的形式 hdfs dfs linux命令 这与linux中命令操作是一样的 hadoop fs等同于hdfs dfs 2 Hadoop命令 hadoop classpath 打印当前hadoop
  • 程序员的自我修养(九)虚拟内存空间

    进程的虚拟地址 每个程序被运行起来以后 它将拥有自己独立的虚拟地址空间 这个虚拟地址空间的大小由计算机的硬件平台决定 具体的说是由CPU的位数决定 对于Linux系统来说 它的进程虚拟空间的划分 1GB 操作系统 3GB 进程 对于Wind
  • derby mysql 性能_derby的三大缺陷

    derby数据库的嵌入式特性让人很流口水 但是 我刚打算将其用进我的项目中 却发现它没有好的分页查询方式 每次都返回所有符合条件的记录 oracle有rownum mysql有limit sqlserver好歹也有个top 汗啊汗 看来不爽
  • 【ROS入门学习01

    ROS命令行工具的使用 可以配合古月居的ROS入门教程来学习实践 文章目录 ROS命令行工具的使用 一 roscore 二 rosrun 三 rqt graph 四 rosnode 五 rostopic 六 rosmsg 七 rosserv
  • 客观面试题--35.Mybatis和hibernate的优缺点?

    Hibernate Hibernate 是当前最流行的ORM框架 对数据库结构提供了较为完整的封装 Mybatis Mybatis同样也是非常流行的ORM框架 主要着力点在于POJO 与SQL之间的映射关系 其次具体从几个方面说一下两者的区
  • 自己动手部署以太坊联盟链

    一个区块链学习项目 GitHub https github com xianfeng92 Love Ethereum 假设已经在Ubunbu 14 04 LTS上安装好了以太坊客户端Geth 使用Geth部署以太坊联盟链 以太坊Geth客户
  • java jvm dump文件_干货分享丨jvm系列:dump文件深度分析

    摘要 java内存dump是jvm运行时内存的一份快照 利用它可以分析是否存在内存浪费 可以检查内存管理是否合理 当发生OOM的时候 可以找出问题的原因 那么dump文件的内容是什么样的呢 JVM dump java内存dump是jvm运行
  • 45_SDIO基础知识

    目录 SDIO协议简介 SDIO设备分类 SD卡物理结构 SD卡寄存器列表 SDIO总线拓扑 SDIO总线 SDIO总线协议 SDIO命令 命令格式 命令类型 响应 SD卡的操作模式 卡识别模式 数据传输模式 STM32 SDIO功能框图
  • vue中element 的 el-table数据量大时,出现卡顿情况解决办法

    一 安装 npm install umy ui 二 引入js和css import umy ui lib theme chalk index css 引入样式 import UTable UTableColumn from umy ui V
  • 时间戳问题汇总

    大家好 我刚接触流媒体不久 现在遇到一个非常奇怪的问题 向各位大侠请假 请你们指点 问题是这样的 用一个 VLC 流媒体客户端 去请求流媒体服务器上的数据 但是获得的数据播放速度明显快于1倍速 大概是 timestamp 不对 不知道是服务
  • 关于Qos中常用的CIR、PIR、CBS、PBS、EBS的解释以及用法关系

    CIR Committed Information Rate 承诺信息速率 每秒可通过的速率 计量单位为Kbps 以bit 位为单位 如设置为500Kbps 每8bit位 1Byte 1Kbps 1024bit PIR Peak Infor
  • ERROR: Could not find a version that satisfies the requirement XXX解决方法

    出现问题 ERROR Could not find a version that satisfies the requirement XXX解决方法 找了很久终于找到能解决这种报错的方法了 直接选用pip源并且信任它的来源就可以解决这种问题
  • No grammar constraints (DTD or XML schema) detected for the document

    No grammar constraints DTD or XML schema detected for the document
  • ESP8266与手机App通信(STM32)

    认识模块 ESP8266是一种低成本的Wi Fi模块 可用于连接物联网设备 控制器和传感器等 它具有小巧 高度集成和低功耗的特点 因此在物联网应用中被广泛使用 ESP8266模块由Espressif Systems开发 具有单芯片的封装和多
  • case when 作为条件_sqlserver条件分支case when使用教程

    在sqlserver的条件分支case when有两种写法 1 case 字段 when 值 then 返回值 when 值2 then 返回值2 end 2 case when 条件1 then 返回值1 when 条件2 then 返回
  • 【翻译】 zswap 压缩交换缓存

    您知道吗 LWN net 是一份由订阅者支持的出版物 我们依靠订阅者来维持整个运作 请通过订阅来帮助我们 让 LWN 继续在网络上运行 2013年2月12日 本文由 Seth Jennings 投稿 交换是性能的最大威胁之一 即使在快速固态
  • mysql中的default_详解MySQL中default的使用

    详解MySQL中default的使用 发布时间 2020 10 03 17 50 29 来源 脚本之家 阅读 60 作者 子不语 wj NULL 和 NOT NULL 修饰符 DEFAULT 修饰符 AUTO INCREMENT 修饰符 N
  • unity的LOD组件

    本文转载自http blog csdn net huutu article details 52106468 LOD是Level Of Detais 的简称 多细节层次 在游戏场景中 根据摄像机与模型的距离 来决定显示哪一个模型 一般距离近
  • 电脑开机时按F几重装系统

    常使用电脑的朋友都清楚 电脑系统有时候会出现故障 如果是出现不能开机的情况就需重我们装系统 那么如果 重装系统f几进入呢 下面小编现在来为大家详细的介绍一下电脑重装系统开机按F几 一起往下看 工具 原料 系统版本 win7系统 品牌型号 联
  • linux内核学习(7)粗略走走kbuild Makefile编译流程

    今天看Makefile文件 我头大了 此Makefile非彼Makefile 里面多了很多内置命令 比如origin patsubst等等啦 这些都没听说过 更可恶的是 连网上都没有 可见 这是一件多么伤人的事情 分析这样的 真是让人折寿啊