0

ワークスペース@baseで、main/macros.bzl に次のような「マクロ」があるとします。

def if_development(if_true, if_false = []):
    return select({
        "//main:development": if_true,
        "//conditions:default": if_false
    })

そして、main/BUILD では:

package(default_visibility = ["//visibility:public"])

config_setting(
    name = "development",
    values = { "define": "MODE=development" },
)

ここで、このマクロを別のワークスペースからロードできるようにしたいと考えています@child。たとえば、次のようになります。

load("@base//main:macros.bzl", "if_development")

//main:developmentその後、ワークスペースに対して解決されず、@baseワークスペースに対して解決されるため、失敗し@childます。

ERROR: /path/to/child/src/BUILD:3:1: no such package 'main': BUILD file not found on package path and referenced by '//src:bar'.

ただし、次のように完全に修飾すると、次のようになります。

def if_development(if_true, if_false = []):
    return select({
        "@base//main:development": if_true,
        "//conditions:default": if_false
    })

その後、 で動作し@childますが、定義しているワークスペース内で使用すると失敗し@baseます@main

ERROR: /path/to/base/src/BUILD:3:1: no such package '@base//main': error loading package 'external': The repository named 'base' could not be resolved and referenced by '//src:bar'.

@base//main:development定義するワークスペースの内外で機能する方法で、マクロ内でを参照するにはどうすればよいですか?

4

1 に答える 1

0

それはバグです!//main:development は @base//main:development として自動的に解決されます。私はそれについて問題を提起しました。

(面倒な) 回避策として、@child//main の構成設定を再定義することができます。

于 2016-06-17T18:55:25.423 に答える