看懂makefile 各种语句及语法、make命令参数

看懂makefile 各种语句及语法 http://c.biancheng.net/view/7093.html

Makefile本质上来讲也是shell脚本,即每条command都是shell进程,运行完shell进程都会退出

1.如果没有定义此变量,则添加:

下方例子是说如果XXNO变量的值是空字符,则赋值该变量,并export出去,使得该变量在整个执行makefile期间让子make可以使用
export将变量传递到子make过程,文件后缀为.mak,需要include .mak 文件

ifeq ($(strip $(XXNO)),)
XXNO=/pathname
export XXNO
endif

更为常用:表示其他变量若有值则export XXNO的值

ifneq ($(strip $(其他变量)),)
XXNO=/pathname
export XXNO
endif

2.获取当前makefile所在文件夹:区分 与脚本的$(pwd)

TRUNK_DIR=$(shell pwd)

3.makefile 的注释同脚本注释 ,使用 “#”

变量的字符引用,假如变量是多字符的,引用不可以直接$,需要使用()或者 { },如果直接引用是引用变量的首字母

$(xxno)
${xxno}
$xxno  相当于  $(x)xxno

makefile允许‘=’两边有空格,这里是shell代码 ,shell不允许‘=’号两边有空格,否则将空格也包含进去。
makefile 的shell代码在目标:另起一行写,在同一行写的话还是makefile代码。

4.在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“; \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行

for循环:如果shell中的变量需要 $$ 多一个$:

for profile in $(PROFILE_SET);\
	do \
		echo [$$id] $$profile;\
		id=`expr $$id + 1`; \
	done;

while循环:

while [ "$$select"x == ""x ] ;\
	do \
		echo $(INFOR5);read select;\
	done; \

5.如果执行的是shell命令,在命令前加@,将不会打印echo “xxx”

@echo "xxx"

6.makefile 中的规则以及嵌套规则(规则与目标的区分):

rule:rule1 rule2 rule3

当make rule 时将会连rule1、rule2、rule3 规则下的shell代码都执行一遍,需要提醒的是make的执行不会理会变量的赋值等,只会理会规则下的shell。


make命令参数

可以参考博客:make命令参数

用法:make [选项] [目标] ...
选项:
  -b, -m                      忽略兼容性。
  -B, --always-make           无条件 make 所有目标。
  -C DIRECTORY, --directory=DIRECTORY
                              在执行前先切换到 DIRECTORY 目录。
  -d                          打印大量调试信息。
  --debug[=FLAGS]             打印各种调试信息。
  -e, --environment-overrides
                              环境变量覆盖 makefile 中的变量。
  -f FILE, --file=FILE, --makefile=FILE
                              从 FILE 中读入 makefile。
  -h, --help                  打印该消息并退出。
  -i, --ignore-errors         Ignore errors from commands. //和-k参数结合使用能够得到所有的编译错误信息
  -I DIRECTORY, --include-dir=DIRECTORY
                              在 DIRECTORY 中搜索被包含的 makefile。
  -j [N], --jobs[=N]          同时允许 N 个任务;无参数表明允许无限个任务。
  -k, --keep-going            当某些目标无法创建时仍然继续。
  -l [N], --load-average[=N], --max-load[=N]
                              在系统负载高于 N 时不启动多任务。
  -L, --check-symlink-times   使用软链接及软链接目标中修改时间较晚的一个。
  -n, --just-print, --dry-run, --recon
                              不要实际运行任何命令;仅仅输出他们
  -o FILE, --old-file=FILE, --assume-old=FILE
                              将 FILE 当做很旧,不必重新生成。
  -p, --print-data-base       打印 make 的内部数据库。
  -q, --question               不运行任何命令;退出状态说明是否已全部更新。
  -r, --no-builtin-rules      禁用内置隐含规则。
  -R, --no-builtin-variables   禁用内置变量设置。
  -s, --silent, --quiet       不显示命令。
  -S, --no-keep-going, --stop
                              关闭 -k。
  -t, --touch                 touch 目标而不是重新创建它们。
  -v, --version               打印 make 的版本号并退出。
  -w, --print-directory       打印当前目录。
  --no-print-directory        关闭 -w,即使 -w 默认开启。
  -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
                              将 FILE 当做最新。
  --warn-undefined-variables  当引用未定义变量的时候发出警告。

该程序为 x86_64-pc-linux-gnu 编译
报告错误到 <bug-make@gnu.org>

#### make completed successfully  ####

举个演示,-n表示不执行只显示

 make CUSTOM=CT PROFILE=CMCC_AP_WIFI6_W30S_Demo libsqlite3 -n

在这里插入图片描述

makefile或者

## 如果需要加其它型号,例如添加S12_UNISOC_PLUS,S12_PRO 可以改成S12_PRO-S12_UNISOC_PLUS
ifneq (,$(findstring $(TZ_PROJECT),S12_PRO))
   CFLAGS += -DCONFIG_STRONG_ENCRYPTION
endif
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值