# <call>

[This is preliminary documentation and subject to change.]

Calls a NAnt target in the current project.

When the <call> task is used to execute a target, both that target and all its dependent targets will be re-executed.

To avoid dependent targets from being executed more than once, two options are available:

- Add an "unless" attribute with value "${target::has-executed('`<target name>`')}" to the dependent targets.
- Set the `cascade` attribute on the <call> task to false (`recommended`).

### Parameters

Attribute | Type | Description | Required
--- | --- | --- | ---
target | string | NAnt target to call. | True
cascade | bool | Execute the specified targets dependencies -- even if they have been previously executed. The default is true. | False
force | bool | Deprecated. Force an execute even if the target has already been executed. The default is false. | False
failonerror | bool | Determines if task failure stops the build, or is just reported. The default is true. | False
if | bool | If true then the task will be executed; otherwise, skipped. The default is true. | False
unless | bool | Opposite of `if`. If false then the task will be executed; otherwise, skipped. The default is false. | False
verbose | bool | Determines whether the task should report detailed build log messages. The default is false. | False

### Examples

- Call the target "build".

      <call target="build" />

- This shows how a project could 'compile' a debug and release build using a common compile target.

      <project default="build">
          <property name="debug" value="false" />
          <target name="init">
              <echo message="initializing" />
          </target>
          <target name="compile" depends="init">
              <echo message="compiling with debug = ${debug}" />
          </target>
          <target name="build">
              <property name="debug" value="false" />
              <call target="compile" />
              <property name="debug" value="true" />
              <call target="compile" />
          </target>
      </project>

  The `cascade` parameter of the <call> task defaults to true, causing the "init" target to be executed for both the "debug" and "release" build.

  This results in the following build log:

      build:

      init:
                      [echo] initializing

      compile:

          [echo] compiling with debug = false

      init:

          [echo] initializing

      compile:

          [echo] compiling with debug = true

      BUILD SUCCEEDED

  If the "init" should only be executed once, set the `cascade` attribute of the <call> task to false.

  The build log would then look like this:

      build:

      init:
                      [echo] initializing

      compile:

          [echo] compiling with debug = false

      compile:

          [echo] compiling with debug = true

      BUILD SUCCEEDED

### Requirements

Assembly: NAnt.Core (0.91.3881.0)