OLD | NEW |
1 # GN Language and Operation | 1 # GN Language and Operation |
2 | 2 |
3 [TOC] | 3 [TOC] |
4 | 4 |
5 ## Introduction | 5 ## Introduction |
6 | 6 |
7 This page describes many of the language details and behaviors. | 7 This page describes many of the language details and behaviors. |
8 | 8 |
9 ### Use the built-in help! | 9 ### Use the built-in help! |
10 | 10 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 | 86 |
87 There is no way to get the length of a list. If you find yourself | 87 There is no way to get the length of a list. If you find yourself |
88 wanting to do this kind of thing, you're trying to do too much work in | 88 wanting to do this kind of thing, you're trying to do too much work in |
89 the build. | 89 the build. |
90 | 90 |
91 Lists support appending: | 91 Lists support appending: |
92 | 92 |
93 ``` | 93 ``` |
94 a = [ "first" ] | 94 a = [ "first" ] |
95 a += [ "second" ] # [ "first", "second" ] | 95 a += [ "second" ] # [ "first", "second" ] |
96 a += [ "third", "fourth" ] # [ "first", "second", "third", "fourth" ] | 96 a += [ "third", "fourth" ] # [ "first", "second", "third", "fourth" ] |
97 b = a + [ "fifth" ] # [ "first", "second", "third", "fourth", "fifth" ] | 97 b = a + [ "fifth" ] # [ "first", "second", "third", "fourth", "fifth" ] |
98 ``` | 98 ``` |
99 | 99 |
100 Appending a list to another list appends the items in the second list | 100 Appending a list to another list appends the items in the second list |
101 rather than appending the list as a nested member. | 101 rather than appending the list as a nested member. |
102 | 102 |
103 You can remove items from a list: | 103 You can remove items from a list: |
104 | 104 |
105 ``` | 105 ``` |
106 a = [ "first", "second", "third", "first" ] | 106 a = [ "first", "second", "third", "first" ] |
107 b = a - [ "first" ] # [ "second", "third" ] | 107 b = a - [ "first" ] # [ "second", "third" ] |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 | 153 |
154 Conditionals look like C: | 154 Conditionals look like C: |
155 | 155 |
156 ``` | 156 ``` |
157 if (is_linux || (is_win && target_cpu == "x86")) { | 157 if (is_linux || (is_win && target_cpu == "x86")) { |
158 sources -= [ "something.cc" ] | 158 sources -= [ "something.cc" ] |
159 } else if (...) { | 159 } else if (...) { |
160 ... | 160 ... |
161 } else { | 161 } else { |
162 ... | 162 ... |
163 } | 163 } |
164 ``` | 164 ``` |
165 | 165 |
166 You can use them in most places, even around entire targets if the | 166 You can use them in most places, even around entire targets if the |
167 target should only be declared in certain circumstances. | 167 target should only be declared in certain circumstances. |
168 | 168 |
169 ### Functions | 169 ### Functions |
170 | 170 |
171 Simple functions look like most other languages: | 171 Simple functions look like most other languages: |
172 | 172 |
173 ``` | 173 ``` |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 other targets. The built-in target types (see `gn help <targettype>` for | 369 other targets. The built-in target types (see `gn help <targettype>` for |
370 more help) are: | 370 more help) are: |
371 | 371 |
372 * `action`: Run a script to generate a file. | 372 * `action`: Run a script to generate a file. |
373 * `action_foreach`: Run a script once for each source file. | 373 * `action_foreach`: Run a script once for each source file. |
374 * `component`: Configurable to be another type of library. | 374 * `component`: Configurable to be another type of library. |
375 * `executable`: Generates an executable file. | 375 * `executable`: Generates an executable file. |
376 * `group`: A virtual dependency node that refers to one or more other | 376 * `group`: A virtual dependency node that refers to one or more other |
377 targets. | 377 targets. |
378 * `shared_library`: A .dll or .so. | 378 * `shared_library`: A .dll or .so. |
| 379 * `loadable_module`: A .dll or .so loadable only at runtime. |
379 * `source_set`: A lightweight virtual static library (usually | 380 * `source_set`: A lightweight virtual static library (usually |
380 preferrable over a real static library since it will build faster). | 381 preferrable over a real static library since it will build faster). |
381 * `static_library`: A .lib or .a file (normally you'll want a | 382 * `static_library`: A .lib or .a file (normally you'll want a |
382 source\_set instead). | 383 `source_set` instead). |
383 | 384 |
384 You can extend this to make custom target types using templates (see below). | 385 You can extend this to make custom target types using templates (see below). |
385 | 386 |
386 ## Configs | 387 ## Configs |
387 | 388 |
388 Configs are named objects that specify sets of flags, include | 389 Configs are named objects that specify sets of flags, include |
389 directories, and defines. They can be applied to a target and pushed to | 390 directories, and defines. They can be applied to a target and pushed to |
390 dependent targets. | 391 dependent targets. |
391 | 392 |
392 To define a config: | 393 To define a config: |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 settings which work a bit differently in Blaze. This is partially to | 726 settings which work a bit differently in Blaze. This is partially to |
726 make conversion from the existing GYP code easier, and the GYP | 727 make conversion from the existing GYP code easier, and the GYP |
727 constructs generally offer more fine-grained control (which is either | 728 constructs generally offer more fine-grained control (which is either |
728 good or bad, depending on the situation). | 729 good or bad, depending on the situation). |
729 | 730 |
730 GN also uses GYP names like "sources" instead of "srcs" since | 731 GN also uses GYP names like "sources" instead of "srcs" since |
731 abbreviating this seems needlessly obscure, although it uses Blaze's | 732 abbreviating this seems needlessly obscure, although it uses Blaze's |
732 "deps" since "dependencies" is so hard to type. Chromium also compiles | 733 "deps" since "dependencies" is so hard to type. Chromium also compiles |
733 multiple languages in one target so specifying the language type on the | 734 multiple languages in one target so specifying the language type on the |
734 target name prefix was dropped (e.g. from `cc_library`). | 735 target name prefix was dropped (e.g. from `cc_library`). |
OLD | NEW |