General Property Page (Project)
This article applies to Visual Studio projects for Windows. For Linux projects, see Linux C++ Property page reference. For CMake projects, see CMake projects in Visual Studio. For Android projects, see General project properties (Android C++). For Android Makefile projects, see General project properties (Android C++ Makefile). In Visual Studio 2019, some properties for non-UWP (Windows Runtime or Universal Windows Platform) projects have moved to the Advanced property page.
To open the Property Pages dialog for a project, select the project (not the solution) in Solution Explorer. Next, select the Project > Project-name Properties menu from the menu bar. Or, right-click on the project node in Solution Explorer and select Properties from the shortcut menu.
In the Property Pages dialog, the Configuration Properties > General property page displays project properties based on project type. These properties are gathered under one or two headings, depending on project type:
General
Project Defaults
General
The General property heading includes some combination of these properties:
Target Platform
Specifies the platform that the project runs on. For example, Windows, Android, or iOS. The value Windows 10 means the project targets the Universal Windows Platform. If you're targeting other versions of Windows, the version isn't listed and the value in this field appears as just Windows. This property is a read-only field that's set when you create a project.
Target Platform Version
Specifies the version of the Windows SDK used to build the project. This property appears only if the project type supports it. You can select 10.0 to specify the latest version of the Windows SDK. If your app can take advantage of features in this Windows SDK version, but can still run on earlier versions without those features, perhaps with some loss of functionality, then the value of this property and the Target Platform Min. Version property might be different. If so, your code should check the version of the platform it's running against at runtime and disable features that aren't available in older platform versions.
Target Platform Min. Version
Specifies the lowest version of the platform that the project can run on. This property appears only if the project type supports it. Set this value if your app can take advantage of features in a newer Windows SDK version, but still runs on earlier versions, perhaps with some loss of functionality. If set to a lower value, your code should check the version of the platform it's running against at runtime. Then, disable features that aren't available in older platform versions.
The C++ project system doesn't enforce this option. It's included for consistency with other languages, such as C# and JavaScript, and as a guide for anyone who uses your project. Microsoft C++ won't generate an error if you use a feature that's not available in the minimum version.
Windows SDK Version
For the Windows target platform, this property specifies the version of the Windows SDK that your project requires. When the Visual Studio Installer installs a C++ Workload, it also installs the required parts of the Windows SDK. If you have other Windows SDK versions on your computer, each version installed appears in the dropdown.
To target Windows 7 or Windows Vista, use the value 8.1, since Windows SDK 8.1 is backward compatible to those platforms. When you target an earlier version, define the appropriate value for _WIN32_WINNT
in targetver.h
. For Windows 7, that's 0x0601. For more information, see Modifying WINVER
and _WIN32_WINNT
.
You can install the Windows XP platform toolset included as an optional component in Visual Studio Installer to build Windows XP and Windows 2003 Server projects. For information on how to obtain and use this platform toolset, see Configuring programs for Windows XP. For more information on changing the platform toolset, see How to: Modify the target framework and platform toolset.
Output Directory
Specifies the directory where build tools such as the linker place all final output files created during the build process. Typically, this directory holds the output of tools such as the linker, librarian, or BSCMake. By default, this property is the directory specified by the macro combination $(SolutionDir)$(Configuration)\
.
To programmatically access this property, see OutputDirectory.
Intermediate Directory
Specifies the directory where tools such as the compiler place all intermediate files created during the build process. Typically, this directory holds the output of tools such as the C/C++ compiler, MIDL, and the resource compiler. By default, this property is the directory specified by the macro $(Configuration)\
.
To programmatically access this property, see IntermediateDirectory.
Target Name
Specifies the file name this project generates. By default, this property is the filename specified by the macro $(ProjectName)
.
Target Extension
Specifies the file extension this project generates, such as .exe
or .dll
. For some Visual Studio 2019 project types, this property has moved to the Advanced property page.
Extensions to Delete on Clean
The Build > Clean menu command deletes files from the intermediate directory where a project's configuration is built. The build system deletes files that have the specified extensions when you run the Clean command or when you rebuild. The build system also deletes any known output of the build no matter where it's located. Deleted files include any intermediate outputs such as .obj
files. Use semicolons (;
) to separate extensions. You can specify wildcard characters (*
, ?
) in the extensions.
To programmatically access this property, see DeleteExtensionsOnClean. For some Visual Studio 2019 project types, this property has moved to the Advanced property page.
Build Log File
Allows you to specify a non-default location for the log file that's created whenever you build a project. The default location is specified by the macro combination $(IntDir)$(MSBuildProjectName).log
. For some Visual Studio 2019 project types, this property has moved to the Advanced property page.
You can use project macros to change the directory location. For more information, see Common macros for build commands and properties.
Platform Toolset
Specifies the toolset used for building the current configuration. This property allows the project to target a different version of the Visual C++ libraries and compiler. By default, Visual Studio C++ projects target the latest toolset installed by Visual Studio. You can choose one of the toolsets installed by several previous versions of Visual Studio instead. Some older toolsets can create executables that run on Windows XP or Vista. For more information on how to change the platform toolset, see How to: Modify the target framework and platform toolset.
Enable Managed Incremental Build
For managed projects, this property enables detection of external visibility when you generate assemblies. If a change to a managed project isn't visible to other projects, then dependent projects don't get rebuilt. This option can dramatically improve build times in solutions that include managed projects. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
Configuration Type
Specifies the project output and its required tools. In UWP projects, this property appears under the Project Defaults heading. There are several configuration types from which to choose, depending on your project type:
Application (.exe)
Displays the linker toolset: The C/C++ Compiler, MIDL, Resource Compiler, Linker, BSCMake, XML Web Service Proxy Generator, custom build, prebuild, prelink, and postbuild events.
Dynamic Library (.dll)
Displays the linker toolset, specifies the /DLL
linker option, and adds the _WINDLL
preprocessor definition to the CL command line.
Makefile
Displays the makefile toolset (NMake).
Static Library (.lib)
Displays the librarian toolset. It's the same as the linker toolset, except it replaces the linker with the librarian and omits XML Web Service Proxy Generator.
Utility
Displays the utility toolset (MIDL, custom build, prebuild, and postbuild events).
To programmatically access this property, see ConfigurationType.
C++ Language Standard
Specifies which C++ language standard to use. The default is /std:c++14
. Specify /std:c++17
to use C++17 features, /std:c++20
to use C++20 features, and /std:c++latest
to use proposed C++23 features or other experimental features. For more information, see /std
(Specify language standard version).
C Language Standard
Specifies which C language standard to use. The default is Legacy MSVC, which implements C89, some of C99, and Microsoft-specific extensions. Specify /std:c11
to use C11 features, and /std:c17
to use C17 features. For more information, see /std
(Specify language standard version)
Project Defaults
Configuration Type
Specifies the project output and its required tools. In UWP projects, this property appears under the Project Defaults heading. There are several configuration types from which to choose, depending on your project type:
Application (.exe)
Displays the linker toolset: The C/C++ Compiler, MIDL, Resource Compiler, Linker, BSCMake, XML Web Service Proxy Generator, custom build, prebuild, prelink, and postbuild events.
Dynamic Library (.dll)
Displays the linker toolset, specifies the /DLL
linker option, and adds the _WINDLL
preprocessor definition to the CL command line.
Makefile
Displays the makefile toolset (NMake).
Static Library (.lib)
Displays the librarian toolset. It's the same as the linker toolset, except it replaces the linker with the librarian and omits XML Web Service Proxy Generator.
Utility
Displays the utility toolset (MIDL, custom build, prebuild, and postbuild events).
To programmatically access this property, see ConfigurationType.
Use of MFC
Specifies whether the MFC project statically or dynamically links to the MFC DLL. Non-MFC projects select Use Standard Windows Libraries. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
To programmatically access this property, see useOfMfc.
Character Set
Specifies whether the _UNICODE
or _MBCS
preprocessor macro should be set. Also affects the linker entry point, where appropriate. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
To programmatically access this property, see CharacterSet.
Common Language Runtime support
Causes the /clr
compiler option to be used. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
To programmatically access this property, see ManagedExtensions.
.NET Target Framework Version
In managed projects, specifies the .NET framework version to target. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
Whole Program Optimization
Specifies the /GL
compiler option and /LTCG
linker option. By default, this property is disabled for Debug configurations, and enabled for Release configurations. In Visual Studio 2019 projects, this property has moved to the Advanced property page.
Windows Store App Support
Specifies whether this project supports Windows Runtime (Universal Windows Platform or UWP) apps. For more information, see /ZW
(Windows Runtime Compilation), and the Windows Developer UWP documentation.
Windows Desktop Compatible
Enables the output of this Windows Runtime project to also support desktop apps. This property sets the <DesktopCompatible>
value in the project file. The Windows Desktop Compatible property is available starting in Visual Studio 2019 version 16.9.