我正在尝试获得有关GN的动手经验,但某些行为对我来说仍然很模糊。
我目前有以下目录树:
root/
- .gn
- gnbuild/
- BUILDCONFIG.gn
- (other .gni files)
- test/
- BUILD.gn
我配置了点文件,以便它将test / BUILD.gn用作根配置:
# .gn
buildconfig = "//gnbuild/BUILDCONFIG.gn"
root = "//test:my_root"
现在我在test / BUILD.gn中有我的工具链声明和可执行文件声明,如下所示:
# test/BUILD.gn
my_toolchain_template("a_toolchain") {
...
}
executable("foo_exec") {
sources = ["foo.cc"]
}
group("my_root") {
deps = [":foo_exec(:a_toolchain)"]
}
现在,似乎GN不喜欢可执行文件声明。 (还有另一条未使用的虚拟工具链,它存在是因为我在弄弄它,但它不应改变结果)。
~/root$ gn gen -v out
Using source root ~/root/
Got dotfile ~/root/.gn
Using build dir //out/
Loading //gnbuild/BUILDCONFIG.gn
Loading //test/BUILD.gn
Running //test/BUILD.gn with toolchain //:fake_toolchain
Loading //gnbuild/toolchain.gni (referenced from //test/BUILD.gn:25)
Defining config //test:conf_default(//:fake_toolchain)
Defining toolchain //test:host_tc_default
Defining target //test:test_executable(//:fake_toolchain)
Defining target //test:test_exe_dump(//:fake_toolchain)
Defining target //test:test_root(//:fake_toolchain)
Loading //BUILD.gn (referenced from //test/BUILD.gn:36)
ERROR at //test/BUILD.gn:36:1: Unable to load "~/root/BUILD.gn".
executable("test_executable") {
^------------------------------
有人可以阐明这种行为吗?我想避免添加一个空的root / BUILD.gn,因为我不完全理解可执行目标为什么需要它。