C ++ / Bazel:如何包含尖括号<>的系统标题?

时间:2018-07-19 16:00:56

标签: c++ bazel

问题:我正在努力针对尖括号中包含的外部依赖项进行构建。

背景:我有一个包含Eigen库的头文件:

#include <Eigen/Dense>

此文件作为外部依赖项安装在系统本地。由于各种原因,修改依赖关系的安装方式目前不是现实的选择。

所以我需要一致的封装外部依赖项作为Bazel目标。目前,我正在研究仅标头的目标,如下所示:

cc_library(
   name = "my_library",
   hdrs = [ "some/local/header.h"],
   textual_hdrs = ["@system_deps//:eigen3"],
   deps = ["@system_deps//:eigen3"],
)

这是基于我的理解,(1)非.h文件需要位于textual_hdrs中,(2)当它不是deps的一部分时肯定看不到它。但是我承认我在黑暗中抓紧了。

这当然指向我的工作空间:

new_local_repository(
  name = "system_deps".
  path = "/usr/include/eigen3",
  build_file_content = """
     cc_library(
       name="eigen3",
       textual_hrds = glob["Eigen/*"]),
       visibility = ["//visibility:public"],
     )
  """,
  )

结果:错误:找不到“本征/密集”文件

(当我的头文件包含在其他位置时,会发生这种情况。)

有趣的是,它确实找到了Eigen / Dense,因为它抱怨(正确)找不到包含的另一个文件。不确定

所以:正确的方法是什么?我读过其他类似的问题,但还没有完全掌握如何封装这些外部依赖项。

1 个答案:

答案 0 :(得分:2)

属性cc_binary.includes是否有用?