GN Frequently Asked Questions

Where is the GN documentation?

GN has extensive built-in help, so you can run gn help, but you can also see all of the help on the reference page. See also the quick start guide and the language and operation details.

Can I generate XCode or Visual Studio projects?

You can generate skeleton (or wrapper) projects for Xcode, Visual Studio, QTCreator, and Eclipse that will list the files and targets in the build, but use Ninja to do the actual build. You cannot generate “real” projects that look like native ones like GYP could.

Run gn help gen for more details.

How do I generate common build variants?

In GN, args go with a build directory rather than being global in the environment. To edit the args for your out/Default build directory:

gn args out/Default

You can set variables in that file:

  • The default is a debug build. To do a release build add is_debug = false
  • The default is a static build. To do a component build add is_component_build = true
  • The default is a developer build. To do an official build, set is_official_build = true
  • The default is Chromium branding. To do Chrome branding, set is_chrome_branded = true

How do I do cross-compiles?

GN has robust support for doing cross compiles and building things for multiple architectures in a single build.

See GNCrossCompiles for more info.

Can I control what targets are built by default?

Yes! If you create a group target called “default” in the top-level (root) build file, i.e., “//:default”, GN will tell Ninja to build that by default, rather than building everything.

Are there any public presentations on GN?

There's at least one, from 2015. There haven't been big changes since then apart from moving it to a standalone repo, so it should still be relevant.