【发布时间】:2018-04-20 20:40:14
【问题描述】:
我目前正在使用第三方库,该库的标头使用尖括号声明,例如标准库:
#include <header.h>
但是,这些标头安装在非标准位置,例如/opt/company/software/version/part_software/include
对于像 MAKE 这样更传统的构建器,我可以只使用 CXXFLAGS 指示 g++ 也在此文件夹中查找库,这最终归结为将 -I/opt/company/software/version/part_software/include 选项传递给 g++。
当尝试在 bazel 中使用 copts = [ "-I/opt/company/software/version/part_software/include" ] 执行相同操作时,我收到“path outside of the execution root”错误。
据我了解,bazel 不喜欢安装 lib 的位置,因为构建需要可重现,并且包含位于执行根之外的库违反了此约束。
我带来的一个丑陋的技巧是在 /usr/local/include 中创建标题的符号链接,并在 bazel 构建中使用 copts = [ "-I/usr/local/include" ]。但是,我发现这种方法非常 hacky,并且我想找到一种更笨拙的方法来解决这个问题。
注意:我无法在 bazel 构建期间安装该程序,因为它使用了一个我无法控制的封闭式安装程序。此安装程序无法在 bazel 的沙盒环境中运行,因为它需要在环境中无法访问的某些路径上进行写入。
【问题讨论】:
-
我确信有构建选项可以修复它,但我不知道 bazel :-)。如果一切都失败了,您能否将项目文件夹中的符号链接添加到已安装的文件夹中?或者从其他可以设置路径的地方。
-
我不知道
bazel,但是在文档网站上可以找到关于第三部分代码的内容:docs.bazel.build/versions/master/bazel-and-cpp.html