我想做这样的事情:
opt-flags : &opt_flags -DCMAKE_BUILD_TYPE=Release
dbg-flags : &dbg_flags -DCMAKE_BUILD_TYPE=Debug
common-flags: &common -DENABLE_EXAMPLES=ON -DENABLE_TESTS=ON
# concatenate previous definitions to create composed definitions
dbg: *common *dbg_flags
opt: *common *opt_flags
这不能直接起作用。是否可以在 YAML 中执行与此等效的操作?
不幸的是,到了 2022 年,您仍然无法将别名与其他别名或字符串连接或连接。除了已接受的答案之外,还有另一种语法,其工作原理相同但更易于阅读(IMO)(这适用于 docker-compose 顺便说一句):
x-foo: &foo
VAR1: value1
x-bar: &bar
VAR2: value2
foobar:
<<:
- *foo
- *bar
# foobar:
# VAR1: value1
# VAR2: value2
还值得注意的是,您也可以嵌套锚点:
x-foo: &foo
VAR1: value1
bar: &bar
VAR2: value2
foobar:
<<: *foo
bing:
<<: *bar
VAR3: value3
# foobar:
# VAR1: value1
# bing:
# VAR2: value2
# VAR3: value3
不,你不能这样做,别名会取代完整的节点。
但是,如果您正在处理映射,则可以使用 merge key language-independent type 如果您的解析器支持将多组键组合到新映射中:
opt-flags : &opt_flags -DCMAKE_BUILD_TYPE=Release
dbg-flags : &dbg_flags -DCMAKE_BUILD_TYPE=Debug
common-flags: &common -DENABLE_EXAMPLES=ON -DENABLE_TESTS=ON
dbg:
<< : [*common_flags, *dbg_flags]
opt:
<< : [*common_flags, *opt_flags]
然而,这将分别生成两个条目,并且不会连接锚定的字符串标量,并且需要一个可以组合多个值的程序,无法保证顺序。