?modifier CLI Syntax
The ?modifier
syntax is an alternative method of specifying CLI level
modifiers, which allows users to specify modifiers for a target pattern by
appending a ?
to the pattern followed by the modifiers delimited by +
.
buck2 build repo//foo:bar?debug+linux
Since the ?modifier
syntax associates modifiers to target patterns rather than
the command, it allows us to potentially condense multiple command invocations.
# Using --modifier flags
buck2 build --modifier debug repo//foo:bar
buck2 build --modifier debug --modifier linux repo//foo:bar
# Using ?modifier syntax
buck2 build repo//foo:bar?debug repo//foo:bar?debug+linux
Use in --target-universe
flag
For command invocations that specify the --target-universe
flag, the
?modifier
syntax must be used as the argument of the --target-universe
flag.
# Use of `?modifier` syntax in `--target-universe` flag
buck2 build repo//foo:bar --target-universe repo//foo:baz?debug
Using the ?modifier
syntax outside of the --target-universe
flag when it is
specified will throw an error.
# Command that would fail and throw an error
buck2 build repo//foo:bar?debug --target-universe repo//foo:baz
Incompatible with --modifier
flag
If the ?modifier
syntax is used in a command invocation, the --modifier
flag
cannot be used.
# Commands that would fail and throw an error
buck2 build --modifier debug repo//foo:bar?linux
buck2 build --modifier debug repo//foo:bar --target-universe repo//foo:baz?linux
Commands that support ?modifier
syntax
Currently, the following commands support the ?modifier
syntax:
build
cquery
(only in--target-universe
flag)ctargets
run
install
audit providers
audit subtargets
Interaction with flags in build
command
To make it easier to see what output comes from which configuration when using
the ?modifier
syntax. The ?modifier
syntax is also displayed in select flags
in the build
command.
?modifier
syntax in --show-output
flag
# CLI input
buck2 build --show-output repo//foo:bar?debug repo//foo:bar?linux
# Example output
repo//foo:bar?debug buck-out/v2/gen/...
repo//foo:bar?linux buck-out/v2/gen/...
?modifier
syntax in --build-report
flag
# CLI input
buck2 build repo//foo:bar?debug repo//foo:bar?linux --build-report repo/build_report.json
// Build report output in repo/build_report.json with ommited fields
{
"results": {
"repo//foo:bar?debug": {
"success": "SUCCESS",
...
},
"repo//foo:bar?linux": {
"success": "SUCCESS",
...
},
}
}