Limits the subsequent build settings to a particular environment.

```lua
configuration { "keywords" }
```

**This function will soon be deprecated and its use is discouraged.** Use the new [filter()](filter.md) function instead; you will get more granular matching and much better performance.

### Parameters ###

`keywords` is a list of identifiers (see below). When all of the keywords in this list match Premake's current context, the settings that follow the `configuration` statement will be applied. If any of the identifiers are not in the current context the settings will be ignored.

The available sources for keywords. Keywords are not case-sensitive.

* **Configuration names.** Any of the configuration names supplied to the **[configurations](configurations.md)** or **[platforms](platforms.md)** functions.

* **Action names** such as **vs2010** or **gmake**. See the [Using Premake](Using-Premake.md) for a complete list.

* **Command line options**.

* **System names** such as **windows**, **macosx**, or **xbox360**.

* **Architectures** such as **x32** or **x64**.

* **Toolsets** such as **gcc**.

* **Target kinds** like **ConsoleApp** or **SharedLib**.

* **Languages** like **C++** or **C#**.

* **File names** can be used to apply settings to a specific set of source code files; this feature is currently very limited.

In addition to the terms listed above, you may use the **\*** and **\*\*** wildcards to match more than one term or file. You may also use the modifiers **not** and **or** to build more complex conditions. See the examples below for more information.

### Examples ###

Define a new symbol which applies only to debug builds; assumes a configuration named "Debug" was defined as part of the workspace.

```lua
configuration "Debug"
  defines { "_DEBUG" }
```

Define a symbol only when targeting Visual Studio 2010.

```lua
configuration "vs2010"
  defines { "VISUAL_STUDIO_2005" }
```

Wildcards can be used to match multiple terms. Define a symbol for all versions of Visual Studio.

```lua
configuration "vs*"
  defines { "VISUAL_STUDIO" }
```

Add a suffix to the debug versions of libraries.

```lua
configuration { "Debug", "SharedLib or StaticLib" }
  targetsuffix "_d"

-- ...or...
configuration { "Debug", "*Lib" }
  targetsuffix "_d"
```

Apply settings based on the presence of a [custom command line option](Command-Line-Arguments.md).

```lua
-- Using an option like --localized
configuration { "localized" }
   files { "src/localizations/**" }

-- Using an option like --renderer=opengl
configuration { "renderer=opengl" }
   files { "src/opengl/**.cpp" }
```

Although support is currently quite limited, you may also apply settings to a particular file or set of files. This example sets the build action for all PNG image files.

```lua
configuration "*.png"
  buildaction "Embed"
```

In the case of files you may also use the **\*\*** wildcard, which will recurse into subdirectories.

```lua
configuration "**.png"
  buildaction "Embed"
```

If multiple keywords are specified, they will be treated as a logical AND. All terms must be present for the block to be applied. This example will apply the symbol only for debug builds on Mac OS X.

```lua
configuration { "debug", "macosx" }
  defines { "DEBUG_MACOSX" }
```

Multiple terms must use Lua's curly bracket list syntax.

You can use the **or** modifier to match against multiple, specific terms.

```lua
configuration "linux or macosx"
  defines { "LINUX_OR_MACOSX" }
```

You can also use **not** to apply the settings to all environments where the identifier is not set.

```lua
configuration "not windows"
  defines { "NOT_WINDOWS" }
```

Finally, you can reset the configuration filter and remove all active keywords by passing the function an empty table.

```lua
configuration {}
```

### Availability ###

Premake 4.0 or later. Will be deprecated at some point in 5.x development in favor of [filter()](filter.md).

### See Also ###

* [Filters](Filters.md)
* [filter](filter.md)
