Makefile的ifeq分支中使用$(warning)触发报错如何解决
Makefile 条件判断块报错问题排查
报错原因
Makefile 语法对行首缩进有强约束:只有目标下的构建命令(recipe)允许以制表符(Tab)作为行首,其余所有逻辑行,包括条件判断块内的函数调用、变量赋值行,都不能以Tab开头。
你当前的代码给ifeq块内部的$(warning)调用、ccflags-y赋值行都加了Tab缩进,make解析时会把这两行识别为构建命令,但此时文件里还没有定义任何构建目标,就会抛出recipe commences before first target错误。
修复方案
把ifeq条件块内部两行开头的Tab全部删除即可,如果你需要视觉上的缩进区分,用普通空格替代Tab也可以,修正后可正常运行的代码如下:
ifeq ($(debug), 1) $(warning Enabled debug mode, do not use it in production environment) ccflags-y += -DDEBUG endif
补充说明:如果是编写Linux内核模块的Kbuild类型Makefile,该条件块放在目标定义(比如
obj-m += xxx.o行)之前也可以正常生效,只要非构建命令行不使用Tab开头就不会触发语法错误。
内容的提问来源于stack exchange,提问作者daisy
相关产品推荐
相关产品推荐

