Как мне поместить сгенерированные источники в частные пути включения в Bazel?

#bazel

#bazel

Вопрос:

Если я помещу genrule вывод в a cc_library , как я могу поместить его в частный путь включения?

Допустим, у меня есть file.c такой:

 #include <config.h>
  

Вот сценарий сборки, который иллюстрирует проблему:

 genrule(
    name = "config",
    outs = ["config.h"],
    cmd = "touch $@",
)

cc_library(
    name = "lib",
    srcs = [
        ":config",
        "file.c",
    ],
    copts = [
        "-isystem",
        # <- what goes here?
    ],
)
  

Я мог бы использовать includes , но это было бы унаследовано другими целями, которые мне не нужны.

Фактический путь к выводу genrule будет примерно таким bazel-out/k8-fastbuild/bin/... , который изменяется в зависимости от конфигурации.

Ответ №1:

Можно использовать $(GENDIR) «создать переменную» в copts :

 cc_library(
   name = "mylib",
   copts = ["-I", "$(GENDIR)/path/to/package"],
)
  

К сожалению, необходимо жестко указать путь к пакету, поскольку $(RULEDIR) переменная в настоящее время там не поддерживается.