我有一个Bazel项目(新的tcmalloc),我正在尝试将它集成到一个典型的GNU Make项目中,该项目使用它自己的编译器/libc++构建。我们的目标是不分叉上游项目。
如果我正确地将所有C++选项传递给bazel (其中一组是-nostdinc++ -I<path to libc++>),那么Bazel就是uhappy The include path '/home/vlovich/myproject/deps/toolchain/libc++/trunk/include' references a path outside of the execution root. (tcmalloc是一个git子模块兄弟@ deps/tcmalloc)。可以通过给Bazel提供一个自定义脚本来实现这种“工作”,因为编译器会注入这些标志,这样Bazel就永远看不到它们了。然而,我只想定义一个工具链来正常工作。
我已经阅读了我能找到的关于这个主题的所有文档,但我不清楚如何将这些文档粘合在一起。
具体地说,我真的不清楚我应该把工具链定义文件放在哪里,或者如何告诉Bazel找到这些定义。有没有办法给bazel一个目录,让它用来查找工具链定义?我是否需要创建一个顶级工作区@ /home/vlovich/myproject并在那里注册tcmalloc和我的工具链,然后从/home/vlovich/myproject而不是/home/vlovich/myproject/deps/tcmalloc调用bazel
发布于 2021-04-17 00:23:36
如果你不是bazel的维护者,工具链支持是相当复杂的,而且很难理解。
您可以使用CC和CXX环境变量来设置不同的编译器,如:CC=your_c_compiler CXX=your_c++_compiler bazel build ...。您可以编写自己的自定义脚本包装器,它将充当普通的C++编译器
该-I<path to libc++>不起作用,因为所有正常的包含路径都必须在srcs属性中定义,或者通过deps属性指示的依赖项定义。对于系统范围的依赖项,请使用-isystem阅读有关它的更多信息https://stackoverflow.com/a/44061589/4638604
https://stackoverflow.com/questions/67128060
复制相似问题