# Class NativeBasePlugin

java.lang.Object
org.gradle.language.plugins.NativeBasePlugin

All Implemented Interfaces:
  `Plugin<Project>`

@Incubating public abstract class NativeBasePlugin extends Object implements Plugin<Project>
A common base plugin for the native plugins.

Expects plugins to register the native components in the `Project.getComponents()` container, and defines a number of rules that act on these components to configure them.

- Configures the "assemble" task to build the development binary of the main component, if present. Expects the main component to be of type `ProductionComponent` and `ComponentWithBinaries`.
- Adds an `"assemble"` task for each binary of the main component.
- Adds tasks to compile and link an executable. Currently requires component implements internal API `ConfigurableComponentWithExecutable`.
- Adds tasks to compile and link a shared library. Currently requires component implements internal API `ConfigurableComponentWithSharedLibrary`.
- Adds tasks to compile and create a static library. Currently requires component implements internal API `ConfigurableComponentWithStaticLibrary`.
- Adds outgoing configuration and artifacts for link file. Currently requires component implements internal API `ConfigurableComponentWithLinkUsage`.
- Adds outgoing configuration and artifacts for runtime file. Currently requires component implements internal API `ConfigurableComponentWithRuntimeUsage`.
- Maven publications. Currently requires component implements internal API `PublicationAwareComponent`.
- Adds `TargetMachineFactory` for configuring `TargetMachine`.

Since:
  4.5

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `(package private) static class`
  `NativeBasePlugin.LinkageSelectionRule`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `NativeBasePlugin(TargetMachineFactory targetMachineFactory)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `apply(Project project)`
  Apply this plugin to the given target object.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### NativeBasePlugin

    @Inject public NativeBasePlugin(TargetMachineFactory targetMachineFactory)

- ## Method Details

  - ### apply

    public void apply(Project project)
    Description copied from interface: `Plugin`
    Apply this plugin to the given target object.
    Specified by:
      `apply` in interface `Plugin<Project>`
    Parameters:
      `project` - The target object