如何使用 bazel build 检查系统是否有一些头文件?

How to check whether system has some header file using bazel build?

我想要找到的是某些特定于平台的头文件的存在。 例如,在源代码中会有这样的#ifdef 部分。

#ifdef HAVE_XXX_H
//...do something
#else
//...do other thing
#endif

在 Autoconf 或 Cmake 中,存在用于检测平台特定头文件或定义的专用宏或命令。因此,我可以根据该宏的结果轻松地将 'HAVE_XXX_H' 设置为 1 或 0。

使用bazel,如何实现这种事情?

谢谢。

您可以使用 select().

示例:select() in cc_library.srcs。您可以在 cc_library.hdrs.

中执行相同的操作

如果您确定 header 始终出现在特定平台上,请使用 László 详述的 select()

如果您确实需要在构建时检测 header,则必须实施一个自定义 repository_rule,它将查询系统并生成一个带有 header 定义宏。