【发布时间】:2019-12-19 06:56:46
【问题描述】:
在 bazel 中从源代码构建项目时,头文件并不总是以正确的相对路径结束。
例如,我想从源代码构建expat。
其他软件将使用的主要标头是<expat.h>。
但是,该项目在expat/lib/expat.h 中有源代码。
我可以通过以下方式成功构建项目:
cc_library(
name = "expat",
srcs = [
"lib/xmlparse.c",
"lib/xmlrole.c",
"lib/xmltok.c",
],
hdrs = [
"expat_config.h",
"lib/ascii.h",
"lib/asciitab.h",
"lib/expat.h",
"lib/expat_external.h",
"lib/iasciitab.h",
"lib/internal.h",
"lib/latin1tab.h",
"lib/nametab.h",
"lib/siphash.h",
"lib/utf8tab.h",
"lib/xmlrole.h",
"lib/xmltok.h",
"lib/xmltok_impl.c",
"lib/xmltok_impl.h",
"lib/xmltok_ns.c",
],
includes = [
".",
"lib",
],
visibility = ["//visibility:public"],
)
但现在其他尝试与@expat//:expat 链接的项目将无法找到<expat.h>。正确的包含需要是<expat/lib/expat.h>,这在其他软件中是不可行的。
按原样构建项目的最佳方式是什么,但仍要确保头文件位于其他使用它们的项目的正确位置?我想知道在调用cc_library 之前是否需要先在云雀中以某种方式执行cp,或者我是否可以在之后移动标题。我不想更改项目的实际内容(因为我可能没有托管它或者我希望镜像保持一致)。我不确定如何编写规则来执行此操作。
【问题讨论】:
标签: c build dependencies bazel