# ExternalNativeBuildFlags


```
@Incubating
public interface ExternalNativeBuildFlags
```

<br />

*** ** * ** ***

DSL object for per-variant CMake and ndk-build configurations, such as toolchain arguments and compiler flags.

```
android {
    // Similar to other properties in the defaultConfig block, you can override
    // these properties for each product flavor you configure.
    defaultConfig {
        // This block is different from the one you use to link Gradle
        // to your CMake or ndk-build script.
        externalNativeBuild {
            // For ndk-build, instead use the ndkBuild block.
            cmake {
                // Passes optional arguments to CMake.
                arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang"

                // Sets a flag to enable format macro constants for the C compiler.
                cFlags "-D__STDC_FORMAT_MACROS"

                // Sets optional flags for the C++ compiler.
                cppFlags "-fexceptions", "-frtti"

                // Specifies the library and executable targets from your CMake project
                // that Gradle should build.
                targets "libexample-one", "my-executible-demo"
            }
        }
    }
}
```

To enable external native builds and set the path to your CMake or ndk-build script, use `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuild`.

## Summary

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuildFlags#cmake(kotlin.Function1)( @https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-extension-function-type/index.html @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/CmakeFlags, https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html> action )` Encapsulates per-variant CMake configurations, such as compiler flags and toolchain arguments. |
| `abstract @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/CmakeFlags` | `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuildFlags#getCmake()()` Encapsulates per-variant CMake configurations, such as compiler flags and toolchain arguments. |
| `abstract @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html<@https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html, @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html>` | `@https://docs.gradle.org/current/javadoc/org/gradle/api/Incubating.html https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuildFlags#getExperimentalProperties()()` Additional per-variant experimental properties for C and C++. |
| `abstract @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/NdkBuildFlags` | `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuildFlags#getNdkBuild()()` Encapsulates per-variant ndk-build configurations, such as compiler flags and toolchain arguments. |
| `abstract void` | `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/ExternalNativeBuildFlags#ndkBuild(kotlin.Function1)( @https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-extension-function-type/index.html @https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/tools/gradle-api/8.3/null/androidx/annotation/NonNull https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/NdkBuildFlags, https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html> action )` Encapsulates per-variant ndk-build configurations, such as compiler flags and toolchain arguments. |

## Public methods

### cmake

```
abstract void cmake(
    @ExtensionFunctionType @NonNull Function1<@NonNull CmakeFlags, Unit> action
)
```

Encapsulates per-variant CMake configurations, such as compiler flags and toolchain arguments.

To enable external native builds and set the path to your `CMakeLists.txt` script, use `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/Cmake#path(kotlin.Any)`.

### getCmake

```
abstract @NonNull CmakeFlags getCmake()
```

Encapsulates per-variant CMake configurations, such as compiler flags and toolchain arguments.

To enable external native builds and set the path to your `CMakeLists.txt` script, use `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/Cmake#path(kotlin.Any)`.

### getExperimentalProperties

```
@Incubating
abstract @NonNull Map<@NonNull String, @NonNull Object> getExperimentalProperties()
```

Additional per-variant experimental properties for C and C++.

### getNdkBuild

```
abstract @NonNull NdkBuildFlags getNdkBuild()
```

Encapsulates per-variant ndk-build configurations, such as compiler flags and toolchain arguments.

To enable external native builds and set the path to your `Android.mk` script, use `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/NdkBuild#path(kotlin.Any)`.

### ndkBuild

```
abstract void ndkBuild(
    @ExtensionFunctionType @NonNull Function1<@NonNull NdkBuildFlags, Unit> action
)
```

Encapsulates per-variant ndk-build configurations, such as compiler flags and toolchain arguments.

To enable external native builds and set the path to your `Android.mk` script, use `https://developer.android.com/reference/tools/gradle-api/8.3/null/com/android/build/api/dsl/NdkBuild#path(kotlin.Any)`.