Makefile之调用函数、嵌入shell命令时缺失空格出错


写Makefile的时候,经常遇到 缺少空格导致的错误,不易察觉却难以一一记住,所以把一些遇到的相关错误整理一下。

调用ifeq函数缺少空格出错

  1. ifeq之后要接一个空格才能接括号,若没有空格可能会出现报错“syntax error near unexpected token `then’” ;
  2. 函数的主体语句要顶格写,不要加tab

一个正确的示例如下

ifeq ($(MAKECMDGOALS),default)
include $(base_dir)/common.mk
endif
ifeq ($(MAKECMDGOALS),debug)
include $(base_dir)/common.mk
endif

使用shell命令判断文件夹是否存在时缺少空格出错

shell命令判度文件夹是否存在可以使用if条件判断,其格式如下:

if  [  -d "filename"  ]; then \
echo "exist"; \
fi
:'-d根据需要可以改为:
-e filename 	如果 filename存在,则为真
-d filename 	如果 filename为目录,则为真 
-f filename 		如果 filename为常规文件,则为真
-L filename 	如果 filename为符号链接,则为真
-r filename 	如果 filename可读,则为真 
-w filename 	如果 filename可写,则为真 
-x filename 	如果 filename可执行,则为真
-s filename 	如果文件长度不为0,则为真
-h filename 	如果文件是软链接,则为真
'

但是使用中要尤其注意以下几点,不然很容易出错。

  1. 符号[前后一定要都是空格
  2. 符号]之前一定要是空格
  3. 可以单行写也可以多行写,多行写在行尾要加上斜杠\
  4. ]之后要加分号;,每条shell命令之后也要加分号;

Makefile单行和多行写shell命令的正确示例为:

 #rm -rf csrc && $(VCS) $(VCS_OPTS) -o $@ -debug_pp 为其它相关的编译语句
#单行格式
$(obj): $(sim_vsrcs) 
   @if [ -d "$(gen_dir)" ]; then echo "exist";fi
   rm -rf csrc && $(VCS) $(VCS_OPTS) -o $@ \
   -debug_pp;
   
#多行格式
$(obj): $(sim_vsrcs) 
   @if [ -d "$(gen_dir)" ]; then \
   echo "exist"; \
   fi
   rm -rf csrc && $(VCS) $(VCS_OPTS) -o $@ \
   -debug_pp\
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值