新闻  |   论坛  |   博客  |   在线研讨会
迅为龙芯2K1000开发板Linux之Makefile基本语法(上)
魔法城堡 | 2021-12-22 15:10:39    阅读:157   发布文章

3 Makefile 变量和变量赋值

变量可以对许多地方使用, 比如目标, 依赖。 或者命令。
变量的赋值可以使用: “ = ” “ ? = ” “ := ” “ += ”
变量的使用: 通过$() 来完成变量的引用。
示例 1
使用 “: = ” 来赋值
使用“ : =” 给变量赋值, 是立刻赋值, 在执行 var =aaa 的同时变量值已经被确定了, 所以最后打印为 aaabbb 而不是 cccbbb 如下图所示。
示例 2
使用“=” 赋值
使用“=” 来赋值, 是延迟赋值, 使用它来赋值是 makefile 里面最后被指定的值。 因为我们最后给变量var1 赋值为 ccc ,所以最后打印为 cccbbb  而不是 aaabbb  如下图所示:
示例 3:
使用 “? =” 来赋值
使用“?=” 来赋值, 如果 var1 变量前面没有被赋值, 那么就给它赋值为 ccc  如果前面已经赋值了,就适应前面的值, 所以, 打印为 aaabbb ,而不是 cccbbb  如下图所示。
然后我们注释掉第一行代码, makefile 中的注释为 #
在运行就会打印 cccbbb ,因为前面没有给 var1 变量赋值。 如下图所示
示例 
使用“+=” 来赋值
使用“+=” 赋值是追加赋值, 是在我们前面定义的好的字符串里面在添加进去新的字符串, 所以运行会打印 aaa bbbccc  不过中间会有空格, 如下图所示:
使用“+=” 也类似于我们这样赋值, 如下图所示:
如果赋值很长, 我们也可以使用换行符“\” , 如下图所示

Makefile 自动化变量

自动化变量就是不用定义且会随着上下程序的不同而发生变化的变量叫做自动化变量。
这里介绍三个最常用的自动化变量:
$@
表示所有目标
$<
表示第一个依赖文件, 如果依赖模式是% 那么它就表示一系列文件。(%为通配符, 类似 linux上的 *
$^
表示所有依赖
在了解这三个自动化变量之前, 我们先来写一个程序:
main.c代码如下
hello.c代码如下:
hello.h 代码如下:
Makefile代码如下:
使用这个 makefile 虽然也可以成功编译, 但是, 一旦编译的文件多了, 如果我们还这样来编写 makefile就会变得非常复杂。 所以, 自动化变量就派上用场啦。接下来我们一步一步的来简化这个 makefile 。
简化一: 用变量表示依赖文件
后面如果我们在增加依赖文件的话, 我们直接在变量 var 后面增加就可以了。
简化二:
使用通配符 %  和自动化变量 $<  $@ 代替依赖和目标, 简化完如下图所示:
简化三:
使用自动化变量 “$^” 表示所有文件依赖的列表, 简化完如下图所示:
迅为龙芯2K1000开发板:
核心板参数:
尺寸:65mm*55mm
CPU :龙芯2K1000双核工业级处理器
主频:800MHz-1GHz
内存:板载2GB DDR3 ,可选4GB
存储:8MB的存储,用来放BOOT引导程序的
工作电压:12V和5V
系统支持:流畅运行vusybx、buiroot、Loognix、QT5.12系统。
引角扩展:引出脚多达232个,1.0间距的邮****孔方式,满足用户各类扩展需求


底板参数:
尺寸:190mm*125mm   
POWER:电直流电源输入接口
SWITCH:电源开关
Ethernet:2 路10M/100M/1000M自适应以太网
USB HOST:4路USB2.0
OTG:支持
Mini HDMI:支持
RGB-LCD:支持
WIFI/BT:板载WIFI、蓝牙二合一模块
Mini PCIE:可外接mini PCIE接口的4G模块,具备PCIE2.0单通道
4G模块 :支持  (选配)
SIM Card:1个
UART:2路串口
RS485:1路
CAN:2路
蜂鸣器:一个有源蜂鸣器
RTC:支持
LIO/UART:2mm间距20PIN插座引出
GPIO :2mm间距20PIN插座引出
耳机接口:标准3.5mm耳机接口
JTAG:1路JTAG调试接口(2mm间距10PIN插座引出)
GPS:一路GPS  (选配)
固态硬盘接口:1路  (SATA固态盘选配)
按键:3个
温度传感器:支持
风扇驱动:支持


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客