OLD | NEW |
1 # GN Quick Start guide | 1 # GN Quick Start guide |
2 | 2 |
3 [TOC] | 3 [TOC] |
4 | 4 |
5 ## Running GN | 5 ## Running GN |
6 | 6 |
7 You just run `gn` from the command line. There is a script in | 7 You just run `gn` from the command line. There is a script in |
8 depot\_tools (which is presumably on your path) with this name. The | 8 depot\_tools (which is presumably on your path) with this name. The |
9 script will find the binary in the source tree containing the current | 9 script will find the binary in the source tree containing the current |
10 directory and run it. | 10 directory and run it. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 See [GNCrossCompiles](cross_compiles.md) for more info. | 67 See [GNCrossCompiles](cross_compiles.md) for more info. |
68 | 68 |
69 ## Configuring goma | 69 ## Configuring goma |
70 | 70 |
71 | 71 |
72 Run `gn args out/Default` (substituting your build directory as needed). | 72 Run `gn args out/Default` (substituting your build directory as needed). |
73 Add: | 73 Add: |
74 | 74 |
75 ``` | 75 ``` |
76 use_goma = true | 76 use_goma = true |
77 goma_dir = "~/foo/bar/goma" | 77 goma_dir = "~/foo/bar/goma" |
78 ``` | 78 ``` |
79 | 79 |
80 If your goma is in the default location (`~/goma`) then you can omit the | 80 If your goma is in the default location (`~/goma`) then you can omit the |
81 `goma_dir` line. | 81 `goma_dir` line. |
82 | 82 |
83 ## Configuring component mode | 83 ## Configuring component mode |
84 | 84 |
85 This is a build arg like the goma flags. run `gn args out/Default` and add: | 85 This is a build arg like the goma flags. run `gn args out/Default` and add: |
86 | 86 |
87 ``` | 87 ``` |
(...skipping 10 matching lines...) Expand all Loading... |
98 executable("hello_world") { | 98 executable("hello_world") { |
99 sources = [ | 99 sources = [ |
100 "hello_world.cc", | 100 "hello_world.cc", |
101 ] | 101 ] |
102 } | 102 } |
103 ``` | 103 ``` |
104 | 104 |
105 There should already be a `hello_world.cc` file in that directory, | 105 There should already be a `hello_world.cc` file in that directory, |
106 containing what you expect. That's it! Now we just need to tell the | 106 containing what you expect. That's it! Now we just need to tell the |
107 build about this file. Open the `BUILD.gn` file in the root directory | 107 build about this file. Open the `BUILD.gn` file in the root directory |
108 and add the label of this target to the dependencies of the root group | 108 and add the label of this target to the dependencies of one of the root |
109 (a "group" target is a meta-target that is just a collection of other | 109 groups (a "group" target is a meta-target that is just a collection of |
110 targets): | 110 other targets): |
111 | 111 |
112 ``` | 112 ``` |
113 group("root") { | 113 group("root") { |
114 deps = [ | 114 deps = [ |
115 ... | 115 ... |
116 "//url", | 116 "//url", |
117 "//tools/gn/tutorial:hello_world", | 117 "//tools/gn/tutorial:hello_world", |
118 ] | 118 ] |
119 } | 119 } |
120 ``` | 120 ``` |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 executable("say_hello") { | 161 executable("say_hello") { |
162 sources = [ | 162 sources = [ |
163 "say_hello.cc", | 163 "say_hello.cc", |
164 ] | 164 ] |
165 deps = [ | 165 deps = [ |
166 ":hello", | 166 ":hello", |
167 ] | 167 ] |
168 } | 168 } |
169 ``` | 169 ``` |
170 | 170 |
171 This executable includes one source file,and depends on the previous | 171 This executable includes one source file and depends on the previous |
172 static library. The static library is referenced by its label in the | 172 static library. The static library is referenced by its label in the |
173 `deps`. You could have used the full label `//tools/gn/tutorial:hello` | 173 `deps`. You could have used the full label `//tools/gn/tutorial:hello` |
174 but if you're referencing a target in the same build file, you can use | 174 but if you're referencing a target in the same build file, you can use |
175 the shortcut `:hello`. | 175 the shortcut `:hello`. |
176 | 176 |
177 ### Test the static library version | 177 ### Test the static library version |
178 | 178 |
179 From the command line in the source root directory: | 179 From the command line in the source root directory: |
180 | 180 |
181 ``` | 181 ``` |
182 ninja -C out/Default say_hello | 182 ninja -C out/Default say_hello |
183 out/Default/say_hello | 183 out/Default/say_hello |
184 ``` | 184 ``` |
185 | 185 |
186 Note that you **didn't** need to re-run GN.GN will automatically rebuild | 186 Note that you **didn't** need to re-run GN. GN will automatically rebuild |
187 the ninja files when any build file has changed. You know this happens | 187 the ninja files when any build file has changed. You know this happens |
188 when ninja prints `[1/1] Regenerating ninja files` at the beginning of | 188 when ninja prints `[1/1] Regenerating ninja files` at the beginning of |
189 execution. | 189 execution. |
190 | 190 |
191 ### Compiler settings | 191 ### Compiler settings |
192 | 192 |
193 Our hello library has a new feature, the ability to say hello to two | 193 Our hello library has a new feature, the ability to say hello to two |
194 people at once. This feature is controlled by defining `TWO_PEOPLE`. We | 194 people at once. This feature is controlled by defining `TWO_PEOPLE`. We |
195 can add defines like so: | 195 can add defines like so: |
196 | 196 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 depend on your target (not transitively). | 268 depend on your target (not transitively). |
269 | 269 |
270 Now if you compile and run, you'll see the new version with two people: | 270 Now if you compile and run, you'll see the new version with two people: |
271 | 271 |
272 ``` | 272 ``` |
273 > ninja -C out/Default say_hello | 273 > ninja -C out/Default say_hello |
274 ninja: Entering directory 'out/Default' | 274 ninja: Entering directory 'out/Default' |
275 [1/1] Regenerating ninja files | 275 [1/1] Regenerating ninja files |
276 [4/4] LINK say_hello | 276 [4/4] LINK say_hello |
277 > out/Default/say_hello | 277 > out/Default/say_hello |
278 Hello, Bill and Ted. | 278 Hello, Bill and Joy. |
279 ``` | 279 ``` |
280 | 280 |
281 ## Don't know what's going on? | 281 ## Don't know what's going on? |
282 | 282 |
283 You can run GN in verbose mode to see lots of messages about what it's | 283 You can run GN in verbose mode to see lots of messages about what it's |
284 doing. Use `-v` for this. | 284 doing. Use `-v` for this. |
285 | 285 |
286 ### Print debugging | 286 ### Print debugging |
287 | 287 |
288 There is a `print` command which just writes to stdout: | 288 There is a `print` command which just writes to stdout: |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 line flag. This will output a summary of timings for various things. | 336 line flag. This will output a summary of timings for various things. |
337 | 337 |
338 You can also make a trace of how the build files were executed: | 338 You can also make a trace of how the build files were executed: |
339 | 339 |
340 ``` | 340 ``` |
341 gn --tracelog=mylog.trace | 341 gn --tracelog=mylog.trace |
342 ``` | 342 ``` |
343 | 343 |
344 and you can load the resulting file in Chrome's `about:tracing` page to | 344 and you can load the resulting file in Chrome's `about:tracing` page to |
345 look at everything. | 345 look at everything. |
OLD | NEW |