Makefile变量定义报错咨询:recipe与missing separate错误排查
Makefile变量定义错误原因及解决办法
第一个错误(续行语法违规)
你标记错误的那行$(USER_INC) \ <-----------ERROR!,问题出在反斜杠\后面存在多余的空格和注释内容。Makefile的续行规则明确要求:反斜杠必须是该行的最后一个字符,后面不能有任何空格、制表符或注释,否则Makefile会将反斜杠后的内容识别为变量的一部分,直接导致语法解析失败。
第二个错误(***missing separate, STOP)
将TAB替换为空格后出现该错误,核心原因还是续行语法不规范,或变量定义格式不符合Makefile要求:
- 检查所有续行的反斜杠,确保每一行的反斜杠后没有任何多余字符(包括行尾空格);
- USER_INC的定义中,每一行的反斜杠同样要保证是该行最后一个字符,不能存在尾随空格;
- Makefile中变量赋值的等号前后允许有空格,续行时用空格缩进是合法的,但前提是续行的反斜杠必须符合规则。
修正后的示例代码
修正N_CFLAGS定义:
N_CFLAGS = -g \ --strict \ $(USER_N_FLAG) \ $(USER_INC) \ -D$(ALT_DEVICE_FAMILY) \ -D$(ALT_DEVICE) \ $(UART_DEFINES) \ $(ADD_CFLAGS_ARMCC)
修正USER_INC定义(确保每一行反斜杠后无多余字符):
USER_INC := -Ilib \ -I$(LIBS_DIR)/include \ -I$(LIBS_DIR)/include/$(DEVICE_FAMILY) \ -I$(LIBS_DIR)/include/$(DEVICE_FAMILY)/miscs \ -I$(F_LIB_DIR) \ -I$(H_LIB_DIR) \ -I$(C_LIB_DIR)
额外说明
即便变量暂时未被使用,Makefile在解析阶段也会检查所有变量定义的语法,只要语法不符合规则就会抛出错误,与变量是否被引用无关。
内容的提问来源于stack exchange,提问作者Alex_Chun
相关产品推荐
相关产品推荐

