如何构建 out-of-tree Fuchsia OS 程序

How to build out-of-tree Fuchsia OS program

安装并构建 Fuchsia OS 后,我可以将示例 hello world 程序中的字符串从 "Hello, World!\n" 修改为 "Hello, Fuchsia!\n"。 然后我 build 并执行生成预期字符串的代码 "Hello, Fuchsia!" 使用:

cd fuchsia
fx set bringup.x64 --with //examples/hello_world
fx build; fx qemu
hello_world_cpp

这对于了解如何更改 Fuchsia 的一部分非常有用 "distribution"。如何在紫红色树之外创建自己的程序?我假设在 Fuchsia OS 上为 运行 创建程序时通常会这样做,这样就可以干净地管理源代码。

回答

third_party 目录用于在 Fuchsia 树之外管理的模块。在顶层 .gitignore 中排除目录 (link):

/third_party/*

您可以在 git (link). It is first populated during bootstrap (link), which internally uses jiri update to fetch repos specified in the integration manifest (e.g. for third_party) 中看到此文件夹大部分是空的。

您将在单独的 git 存储库中维护您的模块。对于开发,您可以将此存储库克隆到 third-party 中的子目录中。由于 .gitignore 条目,它不会被 Fuchsia git.

跟踪

例子

文件:

third_party/hello_world/BUILD.gn
third_party/hello_world/hello_world.cc

BUILD.gn:

import("//build/package.gni")

group("hello_world") {
  deps = [ ":hello-world-cpp" ]
}

executable("bin") {
  output_name = "my_hello_world_cpp"
  sources = [ "hello_world.cc" ]
}

package("hello-world-cpp") {
  deps = [ ":bin" ]
  binaries = [
    {
      name = "my_hello_world_cpp"
    },
  ]
}

hello_world.cc:

#include <iostream>

int main(int argc, char** argv) {
  std::cout << "Hello, World (out-of-tree)!" << std::endl;
  return 0;
}

构建和运行:

$ fx set bringup.x64 --with //third_party/hello_world
$ fx build
$ fx qemu
$ my_hello_world_cpp
Hello, World (out-of-tree)!