我在Xcode项目中使用Bison和Flex。我不想将生成的文件放在源代码控制之下,所以我很高兴地发现Xcode本身支持Bison / Flex文件,在其派生数据文件夹中即时生成解析器。到现在为止还挺好。
但是,Xcode使用嵌入式旧Bison版本(2.3):
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/yacc
它还不支持%define api.pure full
指令。由于这个野牛可执行文件在Xcode.app包下,我不能替换它,所以我通过Brew安装了最新版本,并通过$PATH
(~/.bash_profile
和~/.bashrc
s我的bash配置文件)添加到我的source
。所以在bash我可以说:
$ which bison
/usr/local/Cellar/bison/3.0.4/bin//bison
但是,Xcode仍然使用它自己的版本......我想内部野牛的路径是硬编码的。
我的第二种方法是为Yacc文件创建自定义构建规则,并从那里运行正确版本的bison。这次问题是当Xcode运行我的自定义构建规则时,它立即尝试构建生成的C文件。然而,生成的C文件将依赖于尚未由Flex生成的头文件,因为这是例如声明了yyscan_t
(由Bison在生成的C文件中使用)。但另一方面,Flex生成的C文件还包括Bison生成的头文件,因此首先使用Flex进行编译并没有帮助...
我需要的是首先只生成Flex和Bison标头/源,然后与项目的其余部分一起构建它们。
我怎样才能做到这一点?
我已经设法使用自定义构建规则,使用bison
安装的brew
和macOS附带的flex
,而不是与Xcode捆绑在一起的GitHub。我不确定我的问题是否与你的问题相同,但如果你想看看我的项目是在qazxswpoi。