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

在Makefile中使用空格缩进的方法


tags: Makefile Tips

写在前面

我的编辑器默认都是通过空格代替Tab缩进的, 这就导致在使用Makefile时候会出现下面的错误:

makefile:8: *** missing separator.  Stop.

或者:

makefile:7: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.

一开始看Stack 好像这个问题无解了, 但是后来一个人的回答让我眼前一亮1, 在gnu make4.2版本之后就可以通过一条语句完成空格代替制表位了:

.RECIPEPREFIX := $(.RECIPEPREFIX)<space>

其中<space>用实际的空格代替, 即可.

在我的MacOS上测试发现, 使用xcode自带的make并不能支持, 原因是其版本比较低, 还是3.81的, 而使用brew安装的gmake就是4.4版, 就可以顺利完成制表位到空格的替换了.

下面是一个测试:

.PHONY: all
.RECIPEPREFIX := $(.RECIPEPREFIX) 
all: hello world

hello world: foo foo foo bar bar
        @echo "== target: $@ =="
        @echo $<
        @echo $^
        @echo $+

foo:
        @echo "Hello foo"

bar:
        @echo "Hello Bar"

使用gmake, 输出如下:

Hello foo
Hello Bar
== target: hello ==
foo
foo bar
foo foo foo bar bar
== target: world ==
foo
foo bar
foo foo foo bar bar

ref


  1. Can you make valid Makefiles without tab characters? - Stack Overflow; ↩︎

相关文章:

  • 详解vue中vuex的用法
  • 利用Bat打开exe程序并传入值
  • 【iMessage苹果推群发】苹果相册推它由pushchatkey.pem和pushchatcert.pem作为单独的文件使用
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • 基于Xlinx的时序分析与约束(5)----衍生时钟约束
  • Python常见问题整理
  • Docker安装Zookeeper教程(超详细)
  • 【学习笔记12.25】动态规划入门
  • C语言用好写好头文件
  • 程序员过圣诞 | 用HTML写出绽放的烟花
  • 源码系列 之 HashMap
  • docker logs实时查看日志tail
  • Win10从零安装、训练、部署yolov5 6.x一条龙实战案例
  • 东北大学c++实验最后一次
  • 十六、Docker Compose容器编排第一篇
  • [译]如何构建服务器端web组件,为何要构建?
  • 30秒的PHP代码片段(1)数组 - Array
  • const let
  • css布局,左右固定中间自适应实现
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js继承的实现方法
  • js中forEach回调同异步问题
  • Mybatis初体验
  • orm2 中文文档 3.1 模型属性
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP的类修饰符与访问修饰符
  • unity如何实现一个固定宽度的orthagraphic相机
  • windows-nginx-https-本地配置
  • 检测对象或数组
  • 理清楚Vue的结构
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #1014 : Trie树
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (笔试题)分解质因式
  • (编译到47%失败)to be deleted
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十一)手动添加用户和文件的特殊权限
  • (转)http-server应用
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .form文件_一篇文章学会文件上传
  • .gitignore文件---让git自动忽略指定文件
  • .net core 6 redis操作类
  • .net 按比例显示图片的缩略图
  • .Net 高效开发之不可错过的实用工具
  • .net 获取url的方法
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • @31省区市高考时间表来了,祝考试成功
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname