# Scripting Reference This section describes the functions and variables available to Premake scripts. Premake is built on Lua, so everything in the [Lua Reference Manual][1] applies to a Premake script. Premake adds the ability to define solutions, projects, and configurations, as well as functions useful for build configuration tasks. You may also want to check out [LuaForge][2] for a wide assortment of Lua add-on modules. The `_ACTION` global variable stores the name of the action to be performed on this execution run. As an example, if this command line was used to launch Premake... $ premake4 vs2005 ...then `_ACTION` will be set to "vs2005". If there is no action (for instance, if the command was `premake4 /help`) this variable will be nil. The `_ARGS` global variable stores any arguments to the current action. As an example, if this command line was used to launch Premake... $ premake4 vs2005 alpha beta ...then `_ARGS[1]` will be set to "alpha" and `_ARGS[2]` to "beta". If there are no arguments this array will be empty. The **_OPTIONS** global variable lists the current set of command line options and their values, if any. For more information, see [Command Line Arguments][3]. The `_PREMAKE_COMMAND` global variable stores the full path to the Premake executable. Introduced in Premake 4.4. The `_GENIE_VERSION` global variable stores the current GENie version, i.e. 62. The `_GENIE_VERSION_STR` global variable stores the current GENie version with git commit hash. The `_SCRIPT` global variable stores the full path of the currently executing script. The `_WORKING_DIR` global variable stores the current working directory at the time Premake was launched. Introduced in Premake 4.4. The **buildaction** function specifies how a file or set of files should be treated during the compilation process. It is usually paired with a configuration filter to select a file set. If no build action is specified for a file a default action will be used, based on the file's extension. Build actions are currently only supported for .NET projects, and not for C or C++. **Updated information is [available on the new Premake wiki][4]**. ### Applies To Solutions, projects, and configurations. ### Parameters _action_ is one of: Compile : Treat the file as source code; compile and link it. Embed : Embed the file into the target binary as a resource. Copy : Copy the file to the target directory. None : Do nothing with this file. ### Examples Embed all PNG image files into the target binary. configuration "**.png" buildaction "Embed" The **buildoptions** function passes arguments directly to the compiler command line without translation. buildoptions { "options" } If a project includes multiple calls to **buildoptions** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _options_ is a list of compiler flags and options, specific to a particular compiler. ### Examples Use `pkg-config` style configuration when building on Linux with GCC. Build options are always compiler specific and should be targeted to a particular toolset. configuration { "linux", "gmake" } buildoptions { "`wx-config --cxxflags`", "-ansi", "-pedantic" } The **configuration** function limits the subsequent build settings to a particular environment. configuration { "keywords" } The **configuration** functions acts as a filter. Any settings that appear after this function in the script will be applied only in those environments that match all of the listed keywords. See below for some usage examples. ### Parameters _keywords_ is a list of identifiers (see below). If all of these identifiers are present in the current runtime environment, then the settings following the **configuration** call will be applied. If any of the identifiers is not the current environment the settings will be ignored. The following table lists the available sources for keywords. Keywords are not case-sensitive. Configuration names : Any of the configuration names supplied to the [configurations][5] function. Action names : Any action name, such as **vs2005** or **gmake**. See the [Quick Start][6] for a complete list. Operating system names : Any of the operating system identifiers, such as **windows** or **macosx**, as returned by [os.get][7]. Platform names : Any of the platform identifiers, such as **ps3** or **xbox360**. See [platforms][8] for a complete list. Command-line options : Any of the available command-line options or the option values, whether built-in or custom to the project. File names : Although currently very limited, some settings can be applied to specific files. 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. ### Return Value The function returns the current configuration object; see [The Configuration Block][9] below for more information on the structure of this object. ### Examples Define a new symbol which applies only to debug builds; assumes a configuration named "Debug" was defined as part of the solution. configuration "Debug" defines { "_DEBUG" } Define a symbol only when targeting Visual Studio 2005. configuration "vs2005" defines { "VISUAL_STUDIO_2005" } Wildcards can be used to match multiple terms. Define a symbol for all versions of Visual Studio. configuration "vs*" defines { "VISUAL_STUDIO_2005" } Although support is currently quite limited (only [buildaction][10] works so far), you may also apply settings to a particular file or set of files. This example sets the build action for all PNG image files. configuration "*.png" buildaction "Embed" In the case of files you may also use the ****** wildcard, which will recurse into subdirectories. 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. 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. 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. 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. ### The Configuration Block Each call to **configuration** function creates a new configuration block object. Unless you really know what you are doing, you should treat this object as read-only and use the Premake API to make any changes. The configuration block object contains the following values: buildaction : A build action. buildoptions : A list of compiler options. defines : A list of compiler symbols. excludes : A list of excluded files. files : A list of files. flags : A list of build flags. implibdir : The import library directory. implibextension : The import library file extension. implibname : The import library base file name. implibprefix : The import library file name prefix. implibsuffix : The import library file name suffix. includedirs : A list of include file search directories. keywords : A list of keywords associated with the block. kind : The target kind. libdirs : A list of library search directories. linkoptions : A list of linker options. links : A list of libraries or assemblies to link against. objdir : The objects and intermediate files directory. pchheader : The target file name for precompiled header support. pchsource : The target source file name for precompiled header support. prebuildcommands : A list of pre-build commands. prelinkcommands : A list of pre-link commands. postbuildcommands : A list of post-build commands. resdefines : A list of symbols for the resource compiler. resincludedirs : A list of include file search paths for the resource compiler. resoptions : A list of resource compiler options. startproject : The default startup project (for VS2005+) targetdir : The target output directory. targetextension : The target file extension. targetname : The target base file name. targetprefix : The target file name prefix. targetsuffix : The target file name suffix. terms : The filter terms passed to the configuration function to create the block (i.e. "Debug"). The **configurations** function specifies the set of build configurations, such as "Debug" and "Release", for a solution. configurations { "names" } A configuration encapsulates a collection of build settings, allowing the developer to easily switch between them. "Debug" and "Release" are the most common configurations, the former providing debugging information, and the latter providing optimizations. The list of configurations must be specified before any projects are defined, and once a project has been defined the configuration list may no longer be changed. **Updated information is [available on the new Premake wiki][11].** ### Applies To Solutions only. ### Parameters _names_ is a list of configuration names. Spaces are allowed, but may make using certain Premake features, such as a command-line configuration selection, more difficult. ### Return Value The function returns the current list of configuration names for the active solution. ### Examples Specify debug and release configurations for a solution. solution "MySolution" configurations { "Debug", "Release" } Add additional configurations for a dynamic link library version. configurations { "Debug", "Release", "DebugDLL", "ReleaseDLL" } You can retrieve the current list of configurations by calling the function with no parameters. local cfgs = configurations() The **debugargs** function specifies a list of arguments to pass to the application when run under the debugger. Note that this settings is not implemented for Xcode 3, which requires a per-user configuration file in order to make it work. In Visual Studio, this file can be overridden by a per-user configuration file (such as **ProjectName.vcproj.MYDOMAIN-MYUSERNAME.user**). Removing this file (which is done by Premake's clean action) will restore the default settings. Added in Premake 4.4. ### Applies To Solutions, projects, and configurations. ### Parameters _args_ is a Lua list of arguments to provide to the executable while debugging. ### Examples configuration "Debug" debugargs { "--append", "somefile.txt" } The **debugdir** function sets the working directory for the integrated debugger. Note that this settings is not implemented for Xcode 3, which requires a per-user configuration file in order to make it work. In Visual Studio, this file can be overridden by a per-user configuration file (such as **ProjectName.vcproj.MYDOMAIN-MYUSERNAME.user**). Removing this file (which is done by Premake's clean action) will restore the default settings. Added in Premake 4.4. ### Applies To Solutions, projects, and configurations. ### Parameters _path_ is the path to the working directory, relative to the currently executing script file. ### Examples configuration "Debug" debugdir "bin/debug" The **defines** function adds preprocessor or compiler symbols to a project. If a project includes multiple calls to **defines** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _symbols_ specifies a list of symbols to be defined. ### Examples Define two new symbols in the current project. defines { "DEBUG", "TRACE" } Symbols may also assign values. defines { "CALLSPEC=__dllexport" } The **deploymentoptions** function passes arguments directly to the deployment tool command line without translation. deploymentoptions { "options" } If a project includes multiple calls to **deploymentoptions** the lists are concatenated, in the order in which they appear in the script. Deployment options are currently only supported for Xbox 360 targets. ### Applies To Solutions, projects, and configurations. ### Parameters _options_ is a list of deployment tools flags and options. The **excludes** function removes files, added with the [files][12] function, from a project. If a project includes multiple calls to **excludes** the lists are concatenated. ### Applies To Files may be set on the solution, project, and configuration level. However, only project-level file lists are currently supported. ### Parameters _file_list_ specifies one or more file patterns, separated by commas. File paths should be specified relative to the location of the script file. File patterns may contain the ***** wildcard to match against files in the current directory, or the ****** wildcard to perform a recursive match. ### Examples Add all C files in a directory, and then exclude a specific file. files { "*.c" } excludes { "a_file.c" } Add an entire directory tree of C files, and then exclude one particular directory. files { "**.c" } excludes { "tests/*.c" } The **files** function adds files to a project. If a project includes multiple calls to **files** the lists are concatenated, in the order in which they appear in the script. ### Applies To Files may be set on the solution, project, and configuration level. However, only project-level file lists are currently supported. ### Parameters _file_list_ specifies one or more file patterns, separated by commas. File paths should be specified relative to the location of the script file. File patterns may contain the ***** wildcard to match against files in the current directory, or the ****** wildcard to perform a recursive match. If a wildcard matches more files than you would like, you may filter the list using the [excludes][13] function. ### Examples Add two files to the current project. files { "hello.cpp", "goodbye.cpp" } Add all C++ files from the **src/** directory to the project. Add all C++ files from the **src/** directory, and any subdirectories. The **flags** function specifies build flags to modify the compiling or linking process. If a project includes multiple calls to **flags** the lists are concatenated, in the order in which they appear in the script. **Updated information is [available on the new Premake wiki][14]**. ### Applies To Solutions, projects, and configurations. ### Parameters _flags_list_ is a list of string flag names; see below for a list of valid flags. The flag values are **not** case-sensitive. Flags that are not supported by a particular platform or toolset are ignored. EnableSSE, EnableSSE2 : Use the SSE instruction sets for floating point math. EnableMinimalRebuild : Enable Visual Studio's [minimal rebuild feature][15]. This will also disable multiprocessor compilation. ExtraWarnings : Sets the compiler's maximum warning level. FatalWarnings : Treat warnings as errors. FloatFast : Enable floating point optimizations at the expense of accuracy. FloatStrict : Improve floating point consistency at the expense of performance. Managed : Enable Managed C++ (.NET). MFC : Enable support for Microsoft Foundation Classes. NativeWChar, NoNativeWChar : Enable or disable support for the **wchar** data type. If no flag is specified, the toolset default will be used. No64BitChecks : Disable 64-bit portability warnings. NoEditAndContinue : Disable support for Visual Studio's Edit-and-Continue feature. NoExceptions : Disable C++ exception support. NoFramePointer : Disable the generation of stack frame pointers. NoIncrementalLink : Disable support for Visual Studio's incremental linking feature. NoImportLib : Prevent the generation of an import library for a Windows DLL. NoManifest : Prevent the generation of a manifest for Windows executables and shared libraries. NoMultiProcessorCompilation : Disable multiprocessor compilation in Visual Studio. NoPCH : Disable precompiled header support. If not specified, the toolset default behavior will be used. Also see [pchheader][16] and [pchsource][17]. NoRTTI : Disable C++ runtime type information. Optimize : Perform a balanced set of optimizations. OptimizeSize : Optimize for the smallest file size. OptimizeSpeed : Optimize for the best performance. SEH : Enable [structured exception handling][18]. StaticRuntime : Perform a static link against the standard runtime libraries. Symbols : Generate debugging information. Unicode : Enable Unicode strings. If not specified, the default toolset behavior is used. Unsafe : Enable the use of unsafe code in .NET applications. UnsignedChar : Force char type to be unsigned. WinMain : Use **WinMain()** as the program entry point for Windows applications, rather than the default **main()**. If the existing flags are not sufficient, you can also pass tool-specific arguments directly to the compiler or linker using [buildoptions][19] and [linkoptions][20]. ### Examples A common configuration: enable debugging symbols in the Debug configuration, and optimize the Release configuration. configuration "Debug" flags { "Symbols" }   configuration "Release" flags { "Optimize" } You can specify multiple flags. flags { "Symbols", "ExtraWarnings", "FatalWarnings" } The **framework** function selects a .NET framework version. This value currently is only applied to Visual Studio 2005 or later, and GNU makefiles using Mono. If no framework is specified the toolset default is used. ### Applies To Solutions and projects. ### Parameters _version_ is one of: ### Examples Use the .NET 3.0 Framework. The **iif** function implements an immediate "if" clause, returning one of two possible values. result = iif(condition, trueval, falseval) ### Parameters _condition_ is the logical condition to test. _trueval_ is the value to return if the condition evaluates to true, _falseval_ if the condition evaluates false. ### Return Value _trueval_ is the condition evaluates true, _falseval_ otherwise. ### Examples result = iif(os.is("windows"), "is windows", "is not windows") Note that all expressions are evaluated before the condition is checked; the following expression can not be implemented with an immediate if because it may try to concatenate a string value. result = iif(x ~= nil, "x is " .. x, "x is nil") The **imageoptions** function passes arguments directly to the image tool command line without translation. imageoptions { "options" } If a project includes multiple calls to **imageoptions** the lists are concatenated, in the order in which they appear in the script. Image options are currently only supported for Xbox 360 targets. ### Applies To Solutions, projects, and configurations. ### Parameters _options_ is a list of image tools flags and options. The **imagepath** function sets the file name of the deployment image produced by the build. This value is currently only used by the Xbox 360. ### Applies To Solutions, projects, and configurations. ### Parameters _path_ is the full path for the image file, relative to the currently executing script file. ### See Also [imageoptions][21] The **implibdir** function specifies the import library output directory. Import libraries are generated for Windows DLL projects. By default, the generated project files will place the import library in the same directory as the compiled binary. The **implibdir** function allows you to change this location. ### Applies To Solutions, projects, and configurations. ### Parameters _path_ is the output directory for the library, relative to the currently executing script file. ### See Also [implibname][22] [implibextension][23] [implibprefix][24] [implibsuffix][25] ### Examples The **implibextension** function specifies the import library file extension. Import libraries are generated for Windows DLL projects. By default, the toolset static library file extension will be used (**.lib** with Windows tools, **.a** with GNU tools). The **implibextension** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _ext_ is the new file extension, including the leading dot. ### See Also [implibname][22] [implibdir][26] [implibprefix][24] [implibsuffix][25] ### Examples The **implibname** function specifies the import library base file name. Import libraries are generated for Windows DLL projects. By default, the [target name][27] will be used as the import library file name. The **implibname** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _name_ is the new base file name. ### See Also [implibdir][26] [implibextension][23] [implibprefix][24] [implibsuffix][25] ### Examples The **implibprefix** function specifies the import library file name prefix. Import libraries are generated for Windows DLL projects. By default, the system naming convention will be used: no prefix on Windows, a prefix of "lib" (as in **libMyProject.a**) on other systems. The **implibprefix** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _prefix_ is the new file name prefix. ### See Also [implibname][22] [implibdir][26] [implibextension][23] [implibsuffix][25] ### Examples The prefix may also be set to an empty string for no prefix. The **implibsuffix** function specifies a file name suffix for the import library base file name. Import libraries are generated for Windows DLL projects. ### Applies To Solutions, projects, and configurations. ### Parameters _suffix_ is the new filename suffix. ### See Also [implibname][22] [implibdir][26] [implibprefix][24] [implibextension][23] ### Examples -- Add "-d" to debug versions of files configuration "Debug" implibsuffix "-d" The **include** function looks for a file named **premake4.lua** in a specified directory, and includes it in the current script. This is equivalent to: dofile "directory/premake4.lua" This allows you to specify each project in its own **premake4.lua** file, and then easily include them into a solution, or multiple solutions. ### Parameters _directory_ is the path to the included directory, relative to the currently executing script file. The directory must contain a **premake4.lua** file, or an error will occur. If you wish to call a file other than **premake4.lua**, use the [dofile][28] function instead. ### Return Value Any values returned by the included script are passed through to the caller. ### Examples -- runs "src/MyApplication/premake4.lua" include "src/MyApplication"   -- runs "src/MyLibrary/premake4.lua" include "src/MyLibrary" The **includedirs** function specifies the include file search paths. If a project includes multiple calls to **includedirs** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _paths_ specifies a list of include file search directories. Paths should be specified relative to the currently running script file. ### Examples Define two include file search paths. includedirs { "../lua/include", "../zlib" } You can also use wildcards to match multiple directories. The ***** will match against a single directory, ****** will recurse into subdirectories as well. includedirs { "../includes/**" } The **kind** function sets the kind of binary object being created by the project, such as a console or windowed application, or a shared or static library. **Updated information is [available on the new Premake wiki][29]**. ### Applies To Solutions, projects, and configurations. ### Parameters _kind_ is the project kind identifier, and must be one of: ConsoleApp : A console, or command-line, executable. WindowedApp : An application that runs in a desktop window. This distinction does not apply on Linux, but is important on Windows and Mac OS X. SharedLib : A shared library, or DLL. StaticLib : A static library. ### Examples Set the project to generate a console executable. Set the project to generate a shared library (DLL). You can also set different kinds for each configuration. **This is not supported by Xcode.** solution "MySolution" configurations { "DebugLib", "ReleaseLib", "DebugDLL", "ReleaseDLL" }   project "MyProject" configuration "*Lib" kind "StaticLib"   configuration "*DLL" kind "SharedLib" The **language** function sets the programming language used by a project. Premake currently supports **C**, **C++**, and **C#**. Not all languages are supported by all of the generators; for instance, SharpDevelop does not (currently) support C or C++ development, and Code::Blocks does not support the .NET languages (C#, Managed C++). ### Applies To Solutions and projects. ### Parameters _lang_ is the language identifier. This is a string value, set to one of **C**, **C++**, or **C#**. The value is not case sensitive. ### Examples Set the project language to C++. Set the project language to C# The **libdirs** function specifies the library search paths. Library search directories are not well supported by the .NET tools. Visual Studio will change relative paths to absolute, making it difficult to share the generated project. MonoDevelop and SharpDevelop do not support search directories at all, using only the GAC. In general, it is better to include the full (relative) path to the assembly in [links][30] instead. C/C++ projects do not have this limitation. If a project includes multiple calls to **libdirs** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _paths_ specifies a list of library search directories. Paths should be specified relative to the currently running script file. ### Examples Define two library file search paths. libdirs { "../lua/libs", "../zlib" } You can also use wildcards to match multiple directories. The ***** will match against a single directory, ****** will recurse into subdirectories as well. The **linkoptions** function passes arguments directly to the linker command line without translation. linkoptions { "options" } If a project includes multiple calls to **linkoptions** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _options_ is a list of linker flags and options, specific to a particular linker. ### Examples Use `pkg-config` style configuration when building on Linux with GCC. Build options are always linker specific and should be targeted to a particular toolset. configuration { "linux", "gmake" } linkoptions { "`wx-config --libs`" } The **links** function specifies a list of libraries and projects to link against. If a project includes multiple calls to **links** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _references_ is a list of library and project names. When linking against another project in the same solution, specify the project name here, rather than the library name. Premake will figure out the correct library to link against for the current configuration, and will also create a dependency between the projects to ensure a proper build order. When linking against system libraries, do not include any prefix or file extension. Premake will use the appropriate naming conventions for the current platform. ### Examples Link against some system libraries. configuration "windows" links { "user32", "gdi32" }   configuration "linux" links { "m", "png" }   configuration "macosx" -- OS X frameworks need the extension to be handled properly links { "Cocoa.framework", "png" } In a solution with two projects, link the library into the executable. Note that the project name is used to specify the link; Premake will automatically figure out the correct library file name and directory and create a project dependency. solution "MySolution" configurations { "Debug", "Release" } language "C++"   project "MyExecutable" kind "ConsoleApp" files "**.cpp" links { "MyLibrary" }   project "MyLibrary" kind "SharedLib" files "**.cpp" You may also create links between non-library projects. In this case, Premake will generate a build dependency (the linked project will build first), but not an actual link. In this example, MyProject uses a build dependency to ensure that MyTool gets built first. It then uses MyTool as part of its build process. solution "MySolution" configurations { "Debug", "Release" } language "C++"   project "MyProject" kind "ConsoleApp" files "**.cpp" links { "MyTool" } prebuildcommands { "MyTool --dosomething" }   project "MyTool" kind "ConsoleApp" files "**.cpp" The **location** function sets the destination directory for a generated solution or project file. By default, solution and project files are generated into the same directory as the script that defines them. The **location** function allows you to change this location. Note that unlike other values, **location** does not automatically propagate to the contained projects. Projects will use their default location unless explicitly overridden. ### Applies To Solutions and projects. ### Parameters _path_ is the directory where the generated files should be stored, specified relative to the currently executing script file. ### Examples Set the destination directory for a solution. Setting the location for a project works the same way. solution "MySolution" location "../build" If you plan to build with multiple tools from the same source tree you might want to split up the project files by toolset. The [_ACTION][31] global variable contains the current toolset identifier, as specified on the command line. Note that Lua syntax requires parenthesis around the function parameters in this case. location ("../build/" .. _ACTION) The **newaction** function registers a new command-line action argument. For more information, see [Command Line Arguments][3]. ### Parameters _description_ is a table describing the new action. It may contain the following fields: trigger : The string identifier of the action; what the user would type on the command line. description : A short description of the action, to be displayed in the help text. execute : A function to be executed when the action is fired. ### See Also [Command Line Arguments][3] ### Examples Register a new action to install the software project. newaction { trigger = "install", description = "Install the software", execute = function () os.copyfile("bin/debug/myprogram", "/usr/local/bin/myprogram") end } The **newoption** function registers a new command-line option argument. For more information, see [Command Line Arguments][3]. ### Parameters _description_ is a table describing the new option. It may contain the following fields: trigger : The string identifier of the option; what the user would type on the command line. description : A short description of the option, to be displayed in the help text. value : Optional. If the option needs a value, provides a hint to the user what type of data is expected. allowed : Optional. A list of key-value pairs listing the allowed values for the option. ### See Also [Command Line Arguments][3] ### Examples Register a new option to select a rendering API for a 3D application. newoption { trigger = "gfxapi", value = "API", description = "Choose a particular 3D API for rendering", allowed = { { "opengl", "OpenGL" }, { "direct3d", "Direct3D (Windows only)" }, { "software", "Software Renderer" } } } The **objdir** function sets object and intermediate file directory for a project. By default, object and intermediate files are stored in a directory named "obj" in the same directory as the project. The **objdir** function allows you to change this location. **Updated information is [available on the new Premake wiki][32]**. ### Applies To Solutions, projects, and configurations. ### Parameters _path_ is the directory where the object and intermediate files should be stored, specified relative to the currently executing script file. ### Examples Set an object directory for a project. project "MyProject" objdir "objects" Set object directories per configuration. configuration "Debug" objdir "../obj_debug"   configuration "Release" objdir "../obj_release" The **os.chdir** function changes the current working directory. ### Parameters _path_ is the file system path to the new working directory. ### Return Value **True** if successful, otherwise **nil** and an error message. The **os.copyfile** function copies a file from one location to another. os.copyfile("source", "destination") ### Parameters _Source_ is the file system path to the file to be copied. _Destination_ is the path to the copy location. ### Return Value **True** if successful, otherwise **nil** and an error message. The **os.findlib** function scans the well-known system locations looking for a library file. p = os.findlib("libname") ### Parameters _libname_ is name of the library to locate. It may be specified with (libX11.so) or without (X11) system-specific decorations. ### Return Value The path containing the library file, if found. Otherwise, nil. The **os.get** function identifies the currently targeted operating system. ### Parameters None. ### Return Value An operating system identifier, one of **bsd**, **linux**, **macosx**, **solaris**, or **windows**. Note that this function returns the OS being targeted, which is not necessarily the same as the OS on which Premake is being run. If you are running on Mac OS X and generating Visual Studio project files, the identifier is "Windows", since that is the OS being targeted by the Visual Studio action. ### Example if os.get() == "windows" then -- do something Windows-specific end The **os.getcwd** function gets the current working directory. ### Parameters None. ### Return Value The current working directory. Retrieve version information for the host operating system. Introduced in **Premake 4.4**, this function has not yet been implemented for all platforms. On platforms where this has not been implemented, it will return zero for all version numbers, and the platform name as the description. ### Return Value A table, containing the following key-value pairs: majorversion The major version number minorversion The minor version number revision The bug fix release or service pack number description A human-readable description of the OS version ### Examples local ver = os.getversion() print(string.format(" %d.%d.%d (%s)", ver.majorversion, ver.minorversion, ver.revision, ver.description))   -- On Windows XP: "5.1.3 (Windows XP)" -- On OS X,: "10.6.6 (Mac OS X Snow Leopard)" The **os.is** function checks the current operating system identifier against a particular value. ### Parameters _id_ is one of the operating system identifiers **bsd**, **linux**, **macosx**, **solaris**, or **windows**. Note that this function tests against the OS being targeted, which is not necessarily the same as the OS on which Premake is being run. If you are running on Mac OS X and generating Visual Studio project files, the identifier is "Windows", since that is the OS being targeted by the Visual Studio action. ### Return Value True if the supplied ID matches the current operating system identifier, false otherwise. The **os.is64bit** function determines if the host is using a 64-bit processor. Introduced in **Premake 4.4**. ### Return Value **True** if the host system has a 64-bit processor, **false** otherwise. ### Examples if os.is64bit() then print("This is a 64-bit system") else print("This is NOT a 64-bit system") end The **os.isdir** function checks for the existence of directory. ### Parameters _Path_ is the file system path to check. ### Return Value **True** if a matching directory is found; **false** is there is no such file system path, or if the path points to a file instead of a directory. The **os.isfile** function checks for the existence of file. ### Parameters _Path_ is the file system path to check. ### Return Value **True** if a matching file is found; **false** is there is no such file system path, or if the path points to a directory instead of a file. The **os.matchdirs** function performs a wildcard match to locate one or more directories. matches = os.matchdirs("pattern") ### Parameters _patterm_ is the file system path to search. It may contain single (non-recursive) or double (recursive) asterisk wildcard patterns. ### Return Value A list of directories which match the specified pattern. May be empty. ### Example matches = os.matchdirs("src/*") -- non-recursive match matches = os.matchdirs("src/**") -- recursive match   matches = os.matchdirs("src/test*") -- may also match partial names The **os.matchdirs** function performs a wildcard match to locate one or more directories. matches = os.matchfiles("pattern") ### Parameters _patterm_ is the file system path to search. It may contain single (non-recursive) or double (recursive) asterisk wildcard patterns. ### Return Value A list of files which match the specified pattern. May be empty. ### Example matches = os.matchfiles("src/*.c") -- non-recursive match matches = os.matchfiles("src/**.c") -- recursive match The **os.mkdir** function creates a new directory. ### Parameters _Path_ is the file system path to be created. ### Return Value **True** if successful, otherwise **nil** and an error message. The **os.outputof** function runs a shell command and returns the output. result = os.outputof("command") ### Parameters _command_ is a shell command to run. ### Return Value The output of the command. ### Examples -- Get the ID for the host processor architecture local proc = os.outputof("uname -p") The **os.pathsearch** function searches a collection of paths for a particular file. p = os.pathsearch("fname", "path1", ...) ### Parameters _fname_ is the name of the file being searched. This is followed by one or more path sets to be searched. Path sets match the format of the PATH environment variable: a colon-delimited list of paths. On Windows, you may use a semicolon-delimited list if drive letters might be included. ### Return Value The path to the directory which contains the file, if found. Otherwise, nil. ### Examples local p = os.pathsearch("mysystem.config", "./config:/usr/local/etc:/etc") The **os.rmdir** function removes an existing directory as well as any files or subdirectories it contains. ### Parameters _path_ is the file system path to be removed. ### Return Value **True** if successful, otherwise **nil** and an error message. The **os.stat** function retrieves information about a file. Added in Premake 4.4. ### Parameters _path_ is the filesystem path to file for which to retrieve information. ### Return Value A table of values: mtime : Last modified timestamp size : The file size in bytes The **os.uuid** function returns a [Universally Unique Identifier][33]. ### Parameters None. ### Return Value A new UUID, a string value with the format **74CFC033-FA4D-4B1E-A871-7DC48FA36769**. The **path.getabsolute** function converts a relative path an absolute path. p = path.getabsolute("path") ### Parameters _path_ is the relative path to be converted. It does not need to actually exist on the file system. ### Return Value A new absolute path, calculated from the current working directory. The **path.getbasename** function returns the base file portion of a path, with the directory and file extension removed. p = path.getbasename("path") ### Parameters _path_ is the file system path to be split. ### Return Value The base name portion of the supplied path, with any directory and file extension removed. The **path.getdirectory** function returns the directory portion of a path, with any file name removed. p = path.getdirectory("path") ### Parameters _path_ is the file system path to be split. ### Return Value The directory portion of the path, with any file name removed. If the path does not include any directory information, the "." (single dot) current directory is returned. The **path.getdrive** function returns the drive letter portion of a path, if present. p = path.getdrive("path") ### Parameters _path_ is the file system path to be split. ### Return Value The drive letter portion of the path, if one is specified. Otherwise, nil. The **path.getextension** function returns the file extension portion of a path. p = path.getextension("path") ### Parameters _path_ is the file system path to be split. ### Return Value The file extension portion of the path, or an empty string if no extension is present. The **path.getname** function returns the file name and extension, with any directory information removed. ### Parameters _path_ is the file system path to be split. ### Return Value The file name and extension, with no directory information. The **path.getrelative** function computes a relative path from one directory to another. p = path.getrelative("src", "dest") ### Parameters _src_ is the originating directory, _dest_ is the target directory. Both may be specified as absolute or relative. ### Return Value A relative path from _src_ to _dest_. The **path.isabsolute** function returns true if the specified path is an absolute path. ### Parameters _path_ is the file system path to check. ### Return Value **True** if the specified path is absolute, **false** otherwise. The **path.iscfile** function returns true if the specified path represents a C source code file, based on its file extension. ### Parameters _path_ is the file system path to check. ### Return Value **True** if the path matches a well-known C file extension, **false** otherwise. The **path.iscppfile** function returns true if the specified path represents a C++ source code file, based on its file extension. ### Parameters _path_ is the file system path to check. ### Return Value **True** if the path matches a well-known C++ file extension, **false** otherwise. The **path.isresourcefile** function returns true if the specified path represents a Windows resource file, based on its file extension. path.isresourcefile("path") ### Parameters _path_ is the file system path to check. ### Return Value **True** if the path matches a well-known Windows resource file extension, **false** otherwise. The **path.join** function joins two path portions together into a single path. path.join("leading", "trailing") If _trailing_ is an absolute path, then the leading portion is ignored, and the absolute path is returned instead (see below for examples). ### Parameters _leading_ is the beginning portion of the path; _trailing_ is the ending portion. ### Return Value A merged path. ### Examples -- returns "MySolution/MyProject" p = path.join("MySolution", "MyProject")   -- returns "/usr/bin", because the trailing path is absolute p = path.join("MySolution", "/usr/bin")   -- tokens are assumed to be absolute; this returns "$(ProjectDir)" p = path.join("MySolution", "$(ProjectDir)") The **path.rebase** function takes a relative path and makes it relative to a different location. path.rebase("path", "oldbase", "newbase") ### Parameters _path_ is the relative path to conver. _oldbase_ is the original base directory, from with _path_ is relative. _newbase_ is the new base directory, from where the resulting path should be relative. ### Return Value The rebased path. The **path.translate** function converts the file separators in a path. path.translate("path", "newsep") ### Parameters _path_ is the file system path to translate. _newsep_ is the new path separator. If _newsep_ is nil, the native path separator for the current environment will be used. ### Return Value The translated path. The **pchheader** function sets the main header file for precompiled header support. If no header file is set, the toolset default settings will be used. **Updated information is [available on the new Premake wiki][34]**. ### Applies To Projects only. ### Parameters _file_ is the name of the header file, as it is specified in your source file **#include** statements. ### See Also [pchsource][17] ### Examples pchheader "afxwin.h" pchsource "afxwin.cpp" The **pchsource** function sets the main source file for precompiled header support. This is only used by Visual Studio. If no source file is set, the toolset default settings will be used. **Updated information is [available on the new Premake wiki][35]**. ### Applies To Projects only. ### Parameters _file_ is the name of the source file, specified relative to the currently executing script file. ### See Also [pchheader][16] ### Examples pchheader "afxwin.h" pchsource "afxwin.cpp" _Platform support is a new, experimental feature which will be introduced in **Premake 4.1**. The syntax and behavior described here might change as we sort out the details._ The **platforms** function specifies a set of target hardware platforms for a solution. This is an optional setting; if it is not provided the toolset's default behavior will be used. platforms { "identifiers" } Please see the [Platforms section of the user guide][36] for a lot more information on platforms and how they are used by Premake. **Updated information is [available on the new Premake wiki][37].** ### Applies To Solutions only. ### Parameters _identifiers_ is a list of hardware platform identifiers, and may include any of the following. Native : A general build not targeting any particular platform; uses the default build behavior of the compiler. If your project can be built in a generic fashion, you should include this as the first platform option. x32 : Target a 32-bit environment. x64 : Target a 64-bit environment Universal : Create a Mac OS X universal binary, targeting both 32- and 64-bit versions of x86 and PPC. Note that in order to target multiple architectures, automated dependency generation must be turned off. You should always do a clean build when creating a universal target. Universal builds are not supported by Visual Studio. Universal32 : Like Universal above, but targeting only 32-bit platforms. Universal64 : Like Universal above, but targeting only 64-bit platforms. PS3 : Target the Playstation 3. Xbox360 : Target the Xbox 360 compiler and linker under Visual Studio; ignored elsewhere. Not all platforms are supported on all systems, unsupported platforms will be silently ignored. Some targets require extra configuration of the build tools on the client machine in order to support cross-compilation. ### Return Value The function returns the current list of target platforms for the active solution. ### Examples Provide a generic build that will work anywhere, as well as a Mac OS X Universal build. solution "MySolution" configurations { "Debug", "Release" } platforms { "native", "universal" } Provide 32- and 64-bit specific build targets. No generic build is provided, so one of these two platforms must always be used. Do this only if your software requires knowledge of the underlying architecture at build time, otherwise include "native" to provide a generic build. solution "MySolution" configurations { "Debug", "Release" } platforms { "x32", "x64" } You can retrieve the current list of platforms by calling the function with no parameters. Once you have defined a list of platforms, you may use those identifiers to set up [configuration filters][38] and apply platform-specific settings. configuration "x64" defines "IS_64BIT"   -- You can also mix platforms with other configuration selectors configuration { "Debug", "x64" } defines "IS_64BIT_DEBUG" The **postbuildcommands** function specifies shell commands to run after build is finished. postbuildcommands { "commands" } ### Applies To Solutions, projects, and configurations. ### Parameters _commands_ is one or more shell commands. These commands will be passed to the shell exactly as entered, including path separators and the like. ### See Also [prebuildcommands][39] [prelinkcommands][40] ### Examples configuration "windows" postbuildcommands { "copy default.config bin\project.config" }   configuration "not windows" postbuildcommands { "cp default.config bin/project.config" } The **prebuildcommands** function specifies shell commands to run before each build. prebuildcommands { "commands" } ### Applies To Solutions, projects, and configurations. ### Parameters _commands_ is one or more shell commands. These commands will be passed to the shell exactly as entered, including path separators and the like. ### See Also [prelinkcommands][40] [postbuildcommands][41] ### Examples configuration "windows" prebuildcommands { "copy default.config bin\project.config" }   configuration "not windows" prebuildcommands { "cp default.config bin/project.config" } The **prelinkcommands** function specifies shell commands to run after the source files have been compiled, but before the link step. prelinkcommands { "commands" } ### Applies To Solutions, projects, and configurations. ### Parameters _commands_ is one or more shell commands. These commands will be passed to the shell exactly as entered, including path separators and the like. ### See Also [prebuildcommands][39] [postbuildcommands][41] ### Examples configuration "windows" prelinkcommands { "copy default.config bin\project.config" }   configuration "not windows" prelinkcommands { "cp default.config bin/project.config" } The **printf** performs like its C counterpart, printing a formatted string. It is equivalent to this Lua code: print(string.format(format, unpack(arg)) ### Parameters _format_ is a formatting string containing C **printf()** style formatting codes. It is followed by a list of arguments to be substituted into the format string. ### Return Value None. The **project** function creates a new project and makes it active. Projects contain all of the settings necessary to build a single binary target, and are synonymous with a Visual Studio project. These settings include the list of source code files, the programming language used by those files, compiler flags, include directories, and which libraries to link against. Every project belongs to a solution. ### Parameters _name_ is a unique name for the project. If a project with the given name already exists, it is made active and returned. The project name will be used as the file name of the generated solution file. ### Return Value The function returns the active project object; see [The Project Object][42] below for more information on the structure of this object. ### See Also [solution][43] ### Examples Create a new project named "MyProject". Note that a solution must exist to contain the project. The indentation is for readability and is optional. solution "MySolution" configurations { "Debug", "Release" }   project "MyProject" You can retrieve the currently active project object by calling **project** with no parameters. You can retrieve the list of projects associated with a solution using the **projects** field on the solution object, which may then be iterated over. local prjs = solution().projects for i, prj in ipairs(prjs) do print(prj.name) end ### The Project Object Each project is represented in Lua as a table of key-value pairs. Unless you really know what you are doing, you should treat this object as read-only, and use the Premake API to make any changes. The project object contains the following values. basedir : The directory where the project was original defined; acts as a root for relative paths. blocks : A list of configuration blocks. language : The project language, if set. location : The output directory for the generated project file. name : The name of the project. solution : The solution which contains the project. uuid : The project's unique identifier. The **resdefines** function specifies preprocessor symbols for the resource compiler. If a project includes multiple calls to **resdefines** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _symbols_ specifies a list of symbols to be defined. ### Examples Define two new symbols in the current project. resdefines { "DEBUG", "TRACE" } Symbols may also assign values. resdefines { "CALLSPEC=__dllexport" } The **resincludedirs** function specifies the include file search paths for the resource compiler. resincludedirs { "paths" } If a project includes multiple calls to **resincludedirs** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, and configurations. ### Parameters _paths_ specifies a list of include file search directories. Paths should be specified relative to the currently running script file. ### Examples Define two include file search paths. resincludedirs { "../lua/include", "../zlib" } You can also use wildcards to match multiple directories. The ***** will match against a single directory, ****** will recurse into subdirectories as well. resincludedirs { "../includes/**" } The **resoptions** function passes arguments directly to the resource compiler command line without translation. If a project includes multiple calls to **resoptions** the lists are concatenated, in the order in which they appear in the script. ### Applies To Solutions, projects, configurations ### Parameters _options_ is a list of resource compiler flags and options, specific to a particular compiler. ### Examples Use `pkg-config` style configuration when building on Linux with GCC. Build options are always compiler specific and should be targeted to a particular toolset. configuration { "linux", "gmake" } resoptions { "`wx-config --cxxflags`", "-ansi", "-pedantic" } The **solution** function creates a new solution and makes it active. Solutions are the top-level objects in a Premake build script, and are synonymous with a Visual Studio solution. Each solution contains one or more projects, which it turn contain the settings to generate a single binary target. ### Parameters _name_ is a unique name for the solution. If a solution with the given name already exists, it is made active and returned. The solution name will be used as the file name of the generated solution file. ### Return Value The function returns the active solution object; see [The Solution Object][42] below for more information on the structure of this object. ### Examples Create a new solution named "MySolution". You can retrieve the currently active solution object by calling **solution** with no parameters. You can the global variable **_SOLUTIONS** to list out all of the currently defined solutions. for i, sln in ipairs(_SOLUTIONS) do print(sln.name) end ### The Solution Object Each solution is represented in Lua as a table of key-value pairs. Unless you really know what you are doing, you should treat this object as read-only, and use the Premake API to make any changes. The solution object contains the following values. basedir : The directory where the project was original defined; acts as a root for relative paths. configurations : The list of valid configuration names. blocks : A list of configuration blocks. language : The solution language, if set. location : The output directory for the generated solution file. name : The name of the solution. platforms : A list of target platforms. projects : A list of projects contained by the solution. The **string.endswith** function returns true if the given string ends with the provided sequence. string.endswith("haystack", "needle") ### Parameters _haystack_ is the string to check. _needle_ is the ending sequence to check against. ### Return Value **True** if _haystack_ ends with _needle_. The **string.explode** function returns an array of strings, each of which is a substring of _s_ formed by splitting on boundaries formed by _pattern_. string.explode("str", "pattern") ### Parameters _str_ is the string to be split. _pattern_ is the separator pattern at which to split; it may use Lua's pattern matching syntax. ### Return Value A list of substrings. The **string.findlast** function finds the last instance of a pattern within a string. string.endswith("str", "pattern", plain) ### Parameters _str_ is the string to be searched. _pattern_ is the pattern to search for; it may use Lua's pattern matching syntax. If _plain_ is true, no pattern matching will be performed (faster). ### Return Value The matching pattern, if found, or nil if there were no matches. The **string.startswith** function returns true if the given string starts with the provided sequence. string.startswith("haystack", "needle") ### Parameters _haystack_ is the string to check. _needle_ is the starting sequence to check against. ### Return Value **True** if _haystack_ starts with _needle_. The **table.contains** function determines if an array contains a particular value. table.contains(arr, value) ### Parameters _arr_ is the array to test; _value_ is the value being tested for. ### Return Value True if the array contains the value, false otherwise. The **table.implode** function merges an array of items into a single, formatted string. table.implode(arr, "before", "after", "between") ### Parameters _arr_ is the array to be converted into a string. _before_ is a string to be inserted before each item. _after_ is a string to be inserted after each item. _between_ is a string to be inserted between items. ### Return Value The formatted string. The **targetdir** function sets the destination directory for the compiled binary target. By default, the generated project files will place their compiled output in the same directory as the script. The **targetdir** function allows you to change this location. ### Applies To Solutions, projects, and configurations. ### Parameters _path_ is the file system path to the directory where the compiled target file should be stored. It is specified relative to the currently executing script file. ### See Also [targetname][27] [targetextension][44] [targetprefix][45] ### Examples This project separates its compiled output by configuration type. project "MyProject"   configuration "Debug" targetdir "bin/debug"   configuration "Release" targetdir "bin/release" The **targetextension** function specifies the file extension for the compiled binary target. By default, the project will use the system's normal naming conventions: **.exe** for Windows executables, **.so** for Linux shared libraries, and so on. The **targetextension** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _ext_ is the new file extension, including the leading dot. ### See Also [targetname][27] [targetdir][46] [targetprefix][45] [targetsuffix][47] ### Examples The **targetname** function specifies the base file name for the compiled binary target. By default, the project name will be used as the file name of the compiled binary target. A Windows executable project named "MyProject" will produce a binary named **MyProject.exe**. The **targetname** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _name_ is the new base file name. ### See Also [targetdir][46] [targetextension][44] [targetprefix][45] [targetsuffix][47] ### Examples The **targetprefix** function specifies the file name prefix for the compiled binary target. By default, the system naming convention will be used: a "lib" prefix for POSIX libraries (as in **libMyProject.so**), and no prefix elsewhere. The **targetprefix** function allows you to change this default. ### Applies To Solutions, projects, and configurations. ### Parameters _prefix_ is the new file name prefix. ### See Also [targetname][27] [targetdir][46] [targetextension][44] [targetsuffix][47] ### Examples The prefix may also be set to an empty string for no prefix. The **targetsuffix** function specifies a file name suffix for the compiled binary target. ### Applies To Solutions, projects, and configurations. ### Parameters _suffix_ is the new filename suffix. ### See Also [targetname][27] [targetdir][46] [targetprefix][45] [targetextension][44] ### Examples -- Add "-d" to debug versions of files configuration "Debug" targetsuffix "-d" The **uuid** function sets the [Universally Unique Identifier][33] (UUID) for a project. UUIDs are synonymous (for Premake's purposes) with [Globally Unique Identifiers][48] (GUID). Premake automatically assigns a UUID to each project, which is used by the Visual Studio generators to identify the project within a solution. This UUID is essentially random and will change each time the project file is generated. If you are storing the generated Visual Studio project files in a version control system, this will create a lot of unnecessary deltas. Using the **uuid** function, you can assign a fixed UUID to each project which never changes, removing the randomness from the generated projects. ### Applies To Projects only. ### Parameters _project_uuid_ is the UUID for the current project. It should take the form "01234567-ABCD-ABCD-ABCD-0123456789AB" (see the examples below for some real UUID values). You can use the Visual Studio [guidgen][49] tool to create new UUIDs, or [this website][50], or run Premake once to generate Visual Studio files and copy the assigned UUIDs. ### Returns The current project UUID, or **nil** if no UUID has been set. ### Examples Set the UUID for a current project. uuid "BE2461B7-236F-4278-81D3-F0D476F9A4C0" The **vpaths** function places files into groups or "virtual paths", rather than the default behavior of mirroring the filesystem in IDE-based projects. So you could, for instance, put all header files in a group called "Headers", no matter where they appeared in the source tree. vpaths { ["group"] = "pattern(s)" } Note that _Lua tables do not maintain any ordering between key-value pairs_, so there is no precedence between the supplied rules. That is, you can't write a rule that rewrites the results of an earlier rule, since there is no guarantee in which order the rules will run. Added in Premake 4.4. ### Applies To Virtual paths, like files, may be set on the solution, project, and configuration level. However, only project-level file lists are currently supported. ### Parameters A list of key/value pairs, specified with Lua's standard syntax, which map file patterns to the group in which they should appear. See the examples below for a more complete explanation. ### Examples Place all header files into a virtual path called "Headers". Any directory information is removed, so a path such as **src/lua/lua.h** will appear in the IDE as **Headers/lua.h**. vpaths { ["Headers"] = "**.h" } You may also specify multiple file patterns using the table syntax. vpaths { ["Headers"] = { "**.h", "**.hxx", "**.hpp" } } It is also possible to include the file's path in the virtual group. Using the same example as above, this rule will appear in the IDE as **Headers/src/lua/lua.h**. vpaths { ["Headers/*"] = "**.h" } Any directory information explicitly provided in the pattern will be removed from the replacement. This rule will appear in the IDE as **Headers/lua/lua.h**. vpaths { ["Headers/*"] = "src/**.h" } You can also use virtual paths to remove extra directories from the IDE. For instance, this rule will cause the previous example to appear as **lua/lua.h**, removing the **src** part of the path from _all_ files. And of course, you can specify more than one rule at a time. vpaths { ["Headers"] = "**.h", ["Sources/*"] = {"**.c", "**.cpp"}, ["Docs"] = "**.txt" } [1]: http://www.lua.org/manual/5.1/ [2]: http://luaforge.net/ [3]: http://industriousone.com/command-line-arguments [4]: https://bitbucket.org/premake/premake-stable/wiki/buildaction [5]: http://industriousone.com/configurations [6]: http://industriousone.com/premake/quick-start [7]: http://industriousone.com/osget [8]: http://industriousone.com/platforms-0 [9]: http://industriousone.com#block [10]: http://industriousone.com/buildaction [11]: https://bitbucket.org/premake/premake-dev/wiki/configurations [12]: http://industriousone.com/files [13]: http://industriousone.com/excludes [14]: https://bitbucket.org/premake/premake-stable/wiki/flags [15]: http://msdn.microsoft.com/en-us/library/kfz8ad09(VS.80).aspx [16]: http://industriousone.com/pchheader [17]: http://industriousone.com/pchsource [18]: http://www.microsoft.com/msj/0197/exception/exception.aspx [19]: http://industriousone.com/buildoptions [20]: http://industriousone.com/linkoptions [21]: http://industriousone.com/imageoptions [22]: http://industriousone.com/implibname [23]: http://industriousone.com/implibextension [24]: http://industriousone.com/implibprefix [25]: http://industriousone.com/implibsuffix [26]: http://industriousone.com/implibdir [27]: http://industriousone.com/targetname [28]: http://www.lua.org/manual/5.1/manual.html#pdf-dofile [29]: https://bitbucket.org/premake/premake-stable/wiki/kind [30]: http://industriousone.com/links [31]: http://industriousone.com/action [32]: https://bitbucket.org/premake/premake-dev/wiki/objdir [33]: http://en.wikipedia.org/wiki/UUID [34]: https://bitbucket.org/premake/premake-stable/wiki/pchheader [35]: https://bitbucket.org/premake/premake-stable/wiki/pchsource [36]: http://industriousone.com/platforms [37]: https://bitbucket.org/premake/premake-dev/wiki/platforms [38]: http://industriousone.com/configuration [39]: http://industriousone.com/prebuildcommands [40]: http://industriousone.com/prelinkcommands [41]: http://industriousone.com/postbuildcommands [42]: http://industriousone.com#object [43]: http://industriousone.com/solution [44]: http://industriousone.com/targetextension [45]: http://industriousone.com/targetprefix [46]: http://industriousone.com/targetdir [47]: http://industriousone.com/targetsuffix [48]: http://en.wikipedia.org/wiki/Globally_Unique_Identifier [49]: http://msdn2.microsoft.com/en-us/library/ms241442(VS.80).aspx [50]: http://www.famkruithof.net/uuid/uuidgen