为什么Xcode构建时出现lex报错gm4:stdin:1744: ERROR: end of file in string
问题原因
- 核心是ManOpen是老旧的macOS开源项目,自带的
cat2html.llex规则文件使用了旧版flex兼容语法,你当前Xcode自带的新版flex(搭配gm4预处理器)语法校验更严格,会将旧规则中未显式声明的配置、未完全闭合的字符串判定为语法错误,触发构建失败。 - 你遇到的报错不属于新手操作失误,是项目本身未适配Xcode 12+、macOS 10.15+版本构建规则的历史兼容问题,和你克隆的路径、基础操作没有关系。
解决步骤
方案一:修改项目规则文件(最推荐)
- 打开本地路径下的
/usr/local/Projects/ManOpen/ManOpen/cat2html.tproj/cat2html.l文件 - 在文件最开头添加一行配置:
%option noyywrap
该配置是新版flex要求必须显式声明的参数,旧版flex默认内置所以老项目没有写,添加后即可解决大部分flex语法不兼容问题。
3. 检查文件中所有引号对、%{与%}标记的配对情况,确保没有遗漏的闭合标记,保存文件。
4. 打开Xcode,按下快捷键Shift + Command + K清理构建缓存,重新执行构建操作即可。
方案二:替换Xcode默认flex版本
如果修改规则文件后仍然报错,可以用Homebrew安装兼容旧规则的flex版本替代Xcode自带版本:
- 执行终端命令安装flex:
brew install flex - 打开ManOpen项目的Xcode构建设置(Build Settings),搜索
LEX配置项,将默认值替换为你安装的flex路径:- Intel芯片Mac路径:
/usr/local/bin/flex - M系列芯片Mac路径:
/opt/homebrew/bin/flex
- Intel芯片Mac路径:
- 清理构建缓存后重新执行构建即可。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

