gpt4 book ai didi

c++ - 将 Bison 的 stack.hh、position.hh 和 location.hh 放在不同文件夹中的干净方法

转载 作者:太空狗 更新时间:2023-10-29 23:05:26 26 4
gpt4 key购买 nike

我有一个项目,其中使用 Bison 来生成解析器。项目本身是用 SCons 构建的,我的所有代码都是用 C++ 编写的。我一开始就决定将代码分成 3 个主要目录:includes、src 和 test,其中第一个目录只能包含 public header ,src 包含两个实现和私有(private) header ,以及仅包含测试的test

目前这个约定被 3 个文件打破:stack.hhposition.hhlocation.hh。它们是由 Bison 自动生成的,因为我在 C++ 模式下使用它。但是,虽然我可以使用参数 --defines=include/namespace/parser.hpp 来设置解析器头文件的放置位置,但我找不到一种方法来定义这 3 个文件的放置位置,所以它们保存在与 src/namespace/parser.cpp 相同的文件夹中。

我想知道如何干净地处理它。到目前为止,我想到了 2 个想法:首先是使用 %defineapi.location 将其设置为当前使用的类(这将阻止 Bison 再次生成这些文件) 然后将这些文件移到那里。另一种方法是自行重新实现 positionlocation 类,并使用所述 api 设置它们。一个想法对我来说听起来像是一个肮脏的黑客,而另一个想法对于这样一个简单的任务来说是矫枉过正。

是否有任何其他(干净的)方法来确保解析器使用的帮助程序将放置在 include 目录中,而 src 将仅包含实现?

编辑:

这些文件(或它们的替代品)应该放在公共(public) header 文件夹中的原因是它们包含在 Bison 生成的 parser.hpp 文件中。因此,如果不将这些文件添加到搜索文件夹列表中,我将无法编译任何包含 parser.hpp 的文件。目前我必须将源文件夹的路径添加到包含中,以便编译器可以找到仅在 1 个位置需要的这 3 个文件:生成的 parser.hpp header ,我无法控制它。这是不合逻辑和令人困惑的,所以我想把它改正。

最佳答案

您似乎对文件的存放位置感到困惑,或者至少让感到困惑。一方面,您说您的 include/目录是为公共(public) header 保留的,其他 header 应该放在 src/下。另一方面,您是说 Bison 的辅助类的头文件——肯定是私有(private)的——应该包含在 include/中,因为它不是实现代码。

Bison 应该将这些 header 与解析器的主 C++ 文件放在一起(您似乎确认确实如此),根据您的一组标准,这似乎是正确的位置。如果您仍然希望在其他地方使用这些 header ,那么我认为您需要在事后复制或移动它们。我不喜欢 SCons,但它确实允许您编写规则来实现它。

关于c++ - 将 Bison 的 stack.hh、position.hh 和 location.hh 放在不同文件夹中的干净方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com