| {namespace buck.include_defs} |
| |
| /***/ |
| {template .soyweb} |
| {call buck.page} |
| {param title: 'include_defs()' /} |
| {param prettify: true /} |
| {param content} |
| |
| {call buck.rule} |
| {param overview} |
| The <code>include_defs()</code> function is used to include |
| {sp}<a href="{ROOT}extending/macros.html"><code>macros</code></a> and constants |
| from another file. |
| <p> |
| The <code>include_defs()</code> function executes a file of build-file-style |
| code in the context of the current build file. Therefore, code in the |
| included file may reference Buck functions, such as |
| {sp}<code>java_library()</code>, <code>java_test()</code>, etc., as well |
| as <code>include_defs()</code> itself! |
| <p> |
| The motivation behind <code>include_defs()</code> is to avoid |
| copy-and-pasting code across multiple build files. Often, included files will |
| contain data declarations (as shown in the example below) or definitions of |
| macros for creating more complex build rules. |
| {/param} |
| |
| {param args} |
| |
| {call buck.functionArg} |
| {param desc} |
| The first and only argument is a path, of sorts, to a file containing |
| {sp}<a href="{ROOT}extending/macros.html"><code>macros</code></a> and |
| constants. It looks similar to a build target because it starts with |
| {sp}<code>//</code> (indicating the root of the project), but is not a |
| proper build target because it identifies a file relative to the root of |
| the project rather than a build rule. |
| {/param} |
| {/call} |
| |
| {/param} |
| |
| {param examples} |
| Suppose the file <code>core/DEFS</code> contains the following: |
| {literal}<pre class="prettyprint lang-py"> |
| JARS_TO_EXCLUDE_FROM_DX = [ |
| 'third_party/guava/guava-14.0.1.jar', |
| 'third_party/jackson/jackson-core-2.0.5.jar', |
| 'third_party/jackson/jackson-databind-2.0.5.jar', |
| 'third_party/jackson/jackson-datatype-guava-2.0.4.jar', |
| ] |
| </pre>{/literal} |
| |
| Then another build file could include the array using |
| {sp}<code>include_defs()</code>. This eliminates the need to |
| copy-and-paste definitions across build files: |
| |
| {literal}<pre class="prettyprint lang-py"> |
| include_defs('//core/DEFS') |
| |
| android_binary( |
| name = 'example', |
| # ... |
| no_dx = JARS_TO_EXCLUDE_FROM_DX, |
| ) |
| </pre>{/literal} |
| |
| {/param} |
| |
| {/call} // buck.rule |
| {/param} // content |
| {/call} |
| {/template} |