当前位置: 首页 > news >正文

Makefile:条件判断和循环的使用(十)

1、条件判断
  • ifeq:if equal的缩写,判断是否相等,相等返回true,不相等返回false
  • ifneq:if not equal的缩写,判断是否不相等,不相等返回true,相等返回false
  • ifdef:if definite的缩写,判断变量是否存在,存在返回true,不存在返回false
  • ifndef:if not definite的缩写,判断变量是否不存在,不存在返回true,存在返回false
  • else:否则(可有可无)
  • endif:结束if判断(一定要写)
  • 注意:
    • ifeq、ifneq、ifdef、ifndef与后面的条件需要有空格,否则会语法错误
    • Makefile中没有elseif,如果需要多个条件判断需要嵌套if-else
    • Makefile中也可以没有else
1.1、ifeq、ifneq
A:=123
B:=456ifeq ($(A), 456)RS1:=Yes
elseifeq ($(A), 789)RS1:=789elseRS1:=Noendif
endififneq ($(B), 123)RS2:=Yes
elseRS2:=No
endifshow:@echo "RS1 = "$(RS1)@echo "RS2 = "$(RS2)# 输出
# RS1 = No
# RS2 = Yes
1.2、ifdef、ifndef
tar1:=z
ifdef tar1
tar1:=main
else
tar1:=$(tar1).o
endiftar2=main
ifndef tar2tar2:=main
elsetar2:=$(tar2).o
endifshow1:@echo $(tar1)@echo $(tar2)
# 输出
main
main.o
1.3、向Makefile中传入宏
ifndef tt:=default-main
endifshow:@echo "t="$(t)# 输入:make show -f Makefile
# 输出:t=default-main# 输入:make show -f Makefile t=main
# 输出:t=main
2、Makefile中的循环
  • makefile中支持循环的,并且循环有两种:
    • GNU平台下Makefile有默认的foreach循环
    • 其他平台可以调用shell脚本的循环
  • 调用shell指令可以通过$(shell 指令)或者指令的形式都可以
  • 下面举例分别利用GNU和shell的循环创建文件和文件夹
target:=a b c d
filename=$(foreach v, $(target), $v.txt)show:@echo $(target)@echo $(foreach v, $(target), $v)
#	$(shell touch $(target))
#	touch $(filename)
#	mkdir $(foreach v, $(target), $v-txt)for v in $(target);\do touch $$v.txt;\done$(shell for v in $(target); do mkdir $$v-txt;done)clean:${RM} -rf $(target) $(filename) *txt

相关文章:

  • Ubuntu Desktop 安装有道词典
  • 鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题
  • 蓝桥杯备考
  • Python 正则表达式(re)
  • 东方 - 循环(2) - 求和计数
  • PDF编辑和格式转换工具 Cisdem PDFMaster for Mac
  • Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)
  • 前端三剑客 —— CSS (第三节)
  • JavaScript条件判断
  • 去班味的尽头是风险管理
  • vue2源码解析——vue中如何进行依赖收集、响应式原理
  • 一文解决IDea中Springboot 热部署:IDEA中Spring Boot应用热部署的几种方式及操作步骤
  • linux------jekins构建cicd
  • 【前端开发】教程及案例.docx
  • 重读Java设计模式: 深入探讨建造者模式,构建复杂对象的优雅解决方案
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Django 博客开发教程 8 - 博客文章详情页
  • git 常用命令
  • HTTP 简介
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Less 日常用法
  • Object.assign方法不能实现深复制
  • PAT A1017 优先队列
  • Vue实战(四)登录/注册页的实现
  • 程序员该如何有效的找工作?
  • 初探 Vue 生命周期和钩子函数
  • 基于游标的分页接口实现
  • 将回调地狱按在地上摩擦的Promise
  • 前端技术周刊 2019-02-11 Serverless
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 正则表达式小结
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云移动端播放器高级功能介绍
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (3)llvm ir转换过程
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)php投票系统 毕业设计 121500
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (一)基于IDEA的JAVA基础10
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • **CI中自动类加载的用法总结
  • .bat批处理出现中文乱码的情况
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET4.0并行计算技术基础(1)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [Android]Tool-Systrace
  • [BZOJ2208][Jsoi2010]连通数
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改