Makefile_笔记

Exynos4412 内核移植(二)—— 内核编译过程分析 内核的编译同样是从Makefile 来分析: 一、内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: arch:体系结构相关代码 ipc:进程调度相关代码 mm:内存管理 Documentation:帮助文档 net:网络协议 lib:库 scripts:编译相关脚本工具 tools 阅读详情

参考文章:

makefile中wildcard的用法:http://blog.youkuaiyun.com/liangkaiming/article/details/6267357

makefile函数集锦:http://blog.youkuaiyun.com/turkeyzhou/article/details/8612841

一个通用的Makefile:http://www.cnblogs.com/lidabo/p/4521123.html

makefile使用总结: http://www.cnblogs.com/wang_yb/p/3990952.html

1、常用变量

1)自动变量

$@                              规则的目标所对应的文件名  
$<                              规则中的第一个相关文件名  
$^                              规则中所有相关文件的列表,以空格分割  
$?                              规则中日期新于目标的所有相关文件的列表,以空格分割  
$(@D)                           目标文件的目录部分  
$(@F)                           目标文件的文件名部分  


2)预定义变量

AR                               归档维护程序,默认值=ar  
CPP                              c预处理程序,默认值=cpp  
CC                               c编译程序,默认值=cc  
AS                               汇编程序,默认值=as  
RM                               文件删除程序,默认值=rm -f  
  
ARFLAGS                          传给归档维护程序的标志,默认值=rv  
CPPFLAGS                         传给c预处理程序的标志,无默认值  
CFLAGS                           传给c编译程序的标志,无默认值  
ASFLAGS                          传给汇编程序的标志,无默认值  
LDFLAGS                          传给链接程序(ld)的标志,无默认值 

-c   只编译,不链接

-C  告诉预处理器不要丢弃注释,配合-E使用

-E  预处理后立即停止,不进行编译,预处理后的代码默认送往标准输出

-S  编译后立即停止,不生成目标文件.o,输出汇编文件

-P  告诉预处理器不要产生#line命令

-s --slient :禁止命令显示

-n --just-print : 只显示命令,不执行

-i --ignore-errors : 忽略命令错误

-k --keep-going : 忽略某个规则错误,继续执行其他规则

-w --print-directory : 输出信息看到进入或者离开当前目录 

-e : 使用环境变量

-f --file : 指定Makefile文件

-t --touch : 更新目标文件时间,但不更新目标文件,假装编译过目标,但不是真正的编译目标,只是把目标变成编译过的状态

有的时候我们不想执行Makefile规则,只是想检查下命令或者执行序列,(用于调试) 可以使用以下参数:
-n --just-print --dry-run --recon

-q --question : 找目标,如果目标存在不打印,若不存在,打印一条出错信息

-W <file>   
--what-if=<file>
--assume-new=<file>
--new-file=<file> : 需要指定一个文件(通常是源文件或者依赖文件),和-n参数一起使用,用来查看依赖文件所发生的规则命令
和-p -v参数一起,来输出makefile被执行时的信息

-b -m 忽略和其他版本make的兼容性

-B --always-make :认为所有目标都更新

-C <dir>  --directory=<dir> : 指定读取makefile的目录

-debug[=<options>] : 输出make的调试信息级别
-d : 等同于 --debug=a

-e  --environment-overrides : 指明环境变量的值覆盖makefile中定义的变量的值

-j [num]  --jobs[=num] : 同时运行命令的个数(多核并行)

-p   --print-data-base : 输出makefile中所有的数据,包括规则和变量

-q  --question : 不运行也不输出,仅仅检查目标是否需要更新,0需要更新,2错误发生

-r  --no-builtin-rules : 禁止make使用任何隐含规则

-R  --no-builtin-variabes : 禁止make使用任何作用于变量上的隐含规则

 

 

 

【函数】
wildcard : 获取工作目录下所有c文件列表

subst : 字符串替换

patsubst : 模式字符串替换

strip : 去空格

findstring : 查找字符串

filter : 过滤,保留符合格式的字符串

filter-out : 过滤,保留不符合格式的字符串

sort : 升序 排序

word : 去字符串中n个单词

wordlist :取单词串

words : 统计单词个数

firstword : 去首字母

dir : 从文件名中取目录

notdir :从文件名中取出非目录部分

suffix : 取后缀

basename : 取前缀

addsuffix : 加后缀

addprefix : 加前缀

join : 连接单词

foreach : 循环

call : 用来创建新的参数化函数

shell : 新生成一个shell程序来执行命令

【隐含规则】
C的隐含规则:$(CC) -c $(CPPFLAGS) $(CFLAGS)
C++隐含规则: $(CXX) -c $(CPPFLAGS) $(CFLAGS)

ARFLAGS : 打包程序AR命令参数,默认值是rv

CFLAGS : c语言编译器参数

CXXFLAGS : c++编译器参数

CPPFLAGS : c预处理器参数

LDFLAGS : 链接器参数 

 

 

安装交叉编译工具链

1)获取工具链的绝对路径,例如:/opt/buildroot-gcc342/bin

2)修改环境变量PATH的值

$ cd  ~  
$ vim  .bashrc
在最后一行中添加:
   export  PATH=$PATH: /opt/buildroot-gcc342/bin
保存退出
执行 $source ~/.bashrc

或者

$vim /etc/profile
添加:
export  PATH=$PATH: /opt/buildroot-gcc342/bin
保存退出
最后执行:source /etc/profile 
执行 $source ~/.bashrc

 

添加环境变量,例如:

 

1)对linux下所有用户永久有效

vim /etc/profile文件,添加CLASSPATH变量

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

执行  #source /etc/profile后生效
 

2)对单个用户永久有效

vim /home/用户/.bash.profile 

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

执行  #source /home/用户/.bash.profile后生效

 

 

 

makefile学习笔记 Makefile是一个用于构建软件的文件,其中包含了一系列规则和命令。本文讲述了makefile 的通用介绍:执行过程、概念、变量以及函数等。重点介绍了层次化的 Makefe 的两种编写方式,并配有实际可运行的Makefile的示例。 阅读详情

相关推荐

makefile 学习笔记

直接对变量赋值,:= : 右侧是否有变量,如有变量且变量的定义在后边,则忽略该右侧变量,其他情况同=号+= : 追加赋值?= : 如果符号左侧的变量已经定义过则跳过该句。

weixin_43471255的博客 1038

基于STM32与LoRa的城市河道监控系统设计:低功耗远距离水情采集方案

LoRa是一种远距离低功耗无线通信技术,基于扩频调制实现高链路预算,空旷传输可达数公里,休眠电流仅微安级。在物联网与嵌入式开发中,LoRa常用于多点位传感器数据采集与回传,尤其适合户外无市电、需长期部署的场景。城市河道监控正是典型应用,通过水位、流速、浊度等传感器采集水情数据,由STM32单片机处理后经LoRa回传至网关,实现内涝预警与水质监测。本文围绕这一选题,详解硬件选型、通信协议与低功耗设计,为单片机毕业设计提供完整参考。

weixin_34414196的博客 245

《Linux操作系统-系统移植》第4章 内核移植 - 内核解析(Linux3.14)

4.1内核配置过程分析 4.1.1前言 1、linux内核五大功能: 进程管理(cpu) 内存管理(内存) 设备管理(驱动) 网络管理(网络协议tcp/ip) 文件系统(vfs) 2、linux版本号: linux 2.6 2—&amp;gt;主版本号 6—-&amp;gt;次版本号:奇数代表测试版本 偶数代表稳定版本 本文使用内核版本为linux3.14 3、linux目录结构: ...

不问归期的博客 2588

makefile写法

背景 在windows,linux,macOS三个平台上都写过代码,但是使用不同平台的不同IDE,当代码转移到另一个平台时,编译却很麻烦。例如我在macos上用xcode写的代码,在ubuntu上用qt打开工程后,就无法直接编译使用。因此,使用makefile这个比较通用的方式,可以很好的解决这个问题。 自己的第一个makefile文件 之前使用别人开源的代码,通常都提供了makefile活...

yuanl15的博客 1165

【强化学习】强化学习中,训练过程的稳定性是什么?该如何进行衡量?请详细进行解释

在强化学习中,训练过程的稳定性指的是算法在训练过程中表现出一致的行为,并且能够稳定地收敛到一个好的策略。收敛性:算法是否能够在有限的时间内收敛到一个近似最优的策略。鲁棒性:算法在不同的初始条件或环境扰动下的表现是否稳定。方差:算法在多次运行中表现出的变异程度。稳定的训练过程意味着算法的训练曲线平滑奖励信号变化小,且策略或价值函数的变化是渐进的。

wq6qeg88的博客 1628

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2688

Makefile 阅读笔记

1. vpath 指令 2. 变量替换 3. 变量模式替换 4. define 指令 4.1 定义一个多行字符串. resume 4.2 定义一个函数 greet 4.3:实战 5. 介绍几个内置函数. 1. wildcard 2. foreach 3. eval 4. call

hjjdebug的专栏 754

100天精通Python(数据分析篇)——第53天:初识pandas模块_基础介绍

一、初始pandas 1. 什么是pandas? 2. 为什么要学习pandas? 3. pandas的优势 4. 下载安装pandas 二、Pandas的数据类型 1. Series 2. DataFrame

努力让自己发光,对的人才能迎着光而来 17万+

Makefile 速查笔记

Makefile 速查笔记 - 后台 / 嵌入式全栈之路 - SegmentFault 思否 https://segmentfault.com/a/1190000012091117

MyBlog 151

SAR成像概述

1. 发展概述 雷达是英文Radar(Radio detection and ranging)的音译,原意为“无线电探测与测距”。雷达的发明是无线电发展史上的里程碑,二战时,英国急需通过雷达探测空中金属物体来帮助搜寻德国飞机,这期间,雷达技术飞速发展,发展出了地对空、空对地轰炸、空对空火控、敌我识别等功能。雷达在第二次世界大战中发挥了重大作用,至今仍是军用和许多民用领域的重要传感器。 早期雷达系统通过时间延迟来测距,通过天线指向来测角,通过多普勒频移测速。1951年,Carl Wiley发现,通..

5068

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

【c++ Makefile】Makefile 学习笔记

Makefile学习笔记

QIN_student的博客 743

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

C++自学笔记 makefile

本博客参考南科大于仕琪教授的讲解视频和这位同学的学习笔记: 参考博客感谢两位的分享。用于组织大型项目的编译,是一个一键编译项目的脚本文件。本博客通过四个版本的makefile逐步说明makefile的使用四个演示文件main文件 factorial.cpp文件(用于打印递归) printhello.cpp文件 function.h文件(头文件) 法一(不用makefile) 法二(创建makefile) version 1 原理:比较目标文件hello与依赖文件的最后修改时

weixin_53515170的博客 693

运维简历优化指南,DeepSeek助您运维简历秒变高分!

例如,当掌握了新的运维技术,如 Serverless 架构的运维管理,就将其添加到简历的专业技能部分,并简要描述在相关项目中的应用情况和成果,如 “在 [项目名称] 中,负责 Serverless 架构的运维工作,成功实现了应用的低成本、高弹性运行,降低了运维成本 30%”。上传简历至 DeepSeek,并输入指令:“请根据以下岗位招聘要求,帮我重新解构我的简历,按照【教育背景→实习经历→项目经历→个人评价→技能证书】的模块,输出一份符合下述岗位的简历,提升我的求职竞争力。

大模型大数据攻城狮的专栏 1465

车载软件架构 —— AUTOSAR Vector SIP包(三)

### 上一篇文章中介绍了AUTOSAR基础软件供应商Vector公司的开发工具链,本文将继续介绍Vector公司的AUTOSAR产品。 ### -> 1、Vector SIP包中的StartApplication ### -> 2、StartApplication如何开始使用

Soly_kun的博客 827

Makefile学习笔记-第一个Makefile文件

为什么是Makefile? 主动搜索而来的,可以不读这一大段! 我是在一本叫做《30天编写操作系统》的那本书上听说过makefile的,后来发现书里的很多东西我编译失败,遂放弃这本书。以后有时间还得重新捡起来读一下。 近期在学习c语言描述的数据结构与算法的时候,特别的想写多文件(一个文件的内容太多的话,看着头疼),然后编译的时候就出现了gcc a.c b.c d.c...的命令,头疼!随意makefile就回来了!那么makefile是干什么的也就显而易见了,多文件编译! 根据我之前学习的makef

Brook博客栏 668

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

makefile学习笔记1

本系列是笔者学习makefile所做的笔记,这是第一篇,后续的会持续更新

weixin_48495360的博客 1110

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Makefile笔记

Makefile笔记 记录学习使用过程中

u014593968的专栏 607

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Makefile学习笔记14|u-boot顶层Makefile00

  希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。

qq_43608728的博客 588

Makefile学习笔记目录

Makefile学习笔记目录 Makefile学习笔记01|前言 Makefile学习笔记02|动手编写第一个Makefile Makefile学习笔记03|g++编译的四个步骤 Markfile学习笔记04|Makefile运行流程与变量 Makefile学习笔记05|自动推导与伪目标 Makefile学习笔记06|编译动态链接库 Makefile学习笔记07|编译静态库并通过ifeq语句 ...

qq_43608728的博客 677

嵌入式Linux课程笔记及MakeFile学习资料

嵌入式Linux课程笔记及MakeFile学习资料 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了朱有鹏老师嵌入式Linux课程的全套笔记,内容条理清晰,方便学习。同时,附有陈浩所著的《跟我一起学MakeFile》资料,为您的嵌入式Linux学习之路提供助力。 内容 朱有鹏嵌入式Linux课程笔记:全面涵盖课程内容,详细记录重点知识点,便于复习巩固。 跟我一...

gitblog_06745的博客 344

学习笔记——Makefile基础及入门1

文章为本人的Makefile学习记录,罗列了Makefile中一些必要掌握与常用的知识点,希望和大家一起学习共同进步

ZW_finder的博客 1270

跟我一起写Makefile笔记总结

跟我一起写Makefile笔记总结

SudekiMing的博客 2081

[Linux]学习笔记系列 -- linux_makefile

本文分析了Linux内核顶层Makefile的关键实现逻辑,主要包括以下核心内容: 版本与语法检查 强制要求GNU Make 4.0+版本支持 禁止覆盖内部变量(__前缀目标) 防止路径包含空格/冒号等特殊字符 构建目标控制 通过KBUILD_EXTMOD处理模块构建路径 动态设置KBUILD_BUILTIN/KBUILD_MODULES标志 支持模块/内置对象/混合编译模式 核心构建机制 引入Kbuild.include通用规则 实现cmd命令执行与错误处理 if_changed系列函数实现增量编译 自动

wdfk-prog.space 1164
上一篇: 2017-1-15
下一篇: FIFO_笔记
benjamin721
博客等级 码龄14年 18粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值