Skip to content

Commit 8ea8af1

Browse files
committed
Merge branch 'main' of https://github.com/MicrosoftDocs/cpp-docs-pr into arm
2 parents 510bb30 + 2b245fa commit 8ea8af1

File tree

72 files changed

+948
-935
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+948
-935
lines changed
Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,53 @@
11
---
2-
description: "Learn more about: creating and configuring Visual Studio C++ projects"
3-
title: "Visual Studio Projects - C++"
4-
ms.date: 10/4/2023
2+
title: "Create and Configure Visual Studio C++ Projects"
3+
description: "Learn how to create a Visual Studio C++ project, and then add code and build your project."
4+
ms.date: 03/24/2025
5+
ms.topic: concept-article
56
helpviewer_keywords: ["Visual Studio C++ projects, creating", "projects [C++], creating", "Visual Studio C++ projects"]
67
---
7-
# Visual Studio projects - C++
8+
# Visual Studio C++ projects
89

9-
A *Visual Studio project* is a collection of code files and assets such as icons, images, and so on, that are built together using the MSBuild build system. MSBuild is the native build system for Visual Studio and is generally the best build system to use for Windows-specific programs. MSBuild is tightly integrated with Visual Studio, but you can also use it from the command line.
10+
A *Visual Studio project* is a collection of code files and assets such as icons, images, and so on, that are built together using the MSBuild system. MSBuild is the native build system for Visual Studio and is generally the best build system to use for Windows-specific programs. MSBuild is tightly integrated with Visual Studio, but you can also use it from the command line.
1011

11-
For information about upgrading MSBuild projects from older versions of Visual Studio, see the [Microsoft C++ Porting and Upgrading Guide](../porting/visual-cpp-porting-and-upgrading-guide.md).
12+
For information about upgrading MSBuild projects from older versions of Visual Studio, see the [Microsoft C++ porting and upgrading guide](../porting/visual-cpp-porting-and-upgrading-guide.md).
1213

13-
For cross-platform projects, or projects that use open-source libraries, we recommend using [CMake projects in Visual Studio](cmake-projects-in-visual-studio.md) in Visual Studio 2017 and later.
14+
For cross-platform projects, or projects that use open-source libraries, we recommend using [CMake projects in Visual Studio](cmake-projects-in-visual-studio.md).
1415

1516
## Create a Visual Studio C++ project
1617

1718
::: moniker range=">=msvc-160"
1819

1920
1. Create a C++ project by choosing **File** > **New** > **Project**.
21+
2022
1. In the **Create a new project** dialog, set the **Language** dropdown to **C++**. This filters the list of project templates to C++ projects. You can filter the templates by setting the **Platform**, **Project Type**, or by entering keywords in the search box.
2123

22-
![Screenshot of the Create a new project wizard. The Console App project template is selected.](../build/media/vs2019-choose-console-app.png)
24+
:::image type="content" source="../build/media/vs2019-choose-console-app.png" alt-text="Screenshot of the Create a new project wizard. The Console App project template is selected.":::
2325

2426
1. Select a project template, then choose **Next**.
27+
2528
1. On the **Configure your new project page**, enter project-specific settings such as the project name or location and then choose **Create** to create your project.
2629

2730
::: moniker-end
2831

2932
::: moniker range="msvc-150"
3033

3134
1. Create a C++ project by choosing **File** > **New** > **Project**.
35+
3236
1. Choose **Visual C++** in the left pane. In the center pane, a list of project templates appears:
3337

34-
![Screenshot of the New Project dialog, showing available project templates for C++ such as Windows Console Application.](../overview/media/vs2017-new-project.png "Visual Studio 2017 New Project Dialog")
38+
:::image type="content" source="../overview/media/vs2017-new-project.png" alt-text="Screenshot of the New Project dialog, showing available project templates for C++ such as Windows Console Application.":::
3539

3640
::: moniker-end
3741

3842
For more information about the default project templates included in Visual Studio, see [C++ project templates in Visual Studio](reference/visual-cpp-project-types.md).
3943

40-
You can create your own project templates. For more information, see [How to: Create project templates](/visualstudio/ide/how-to-create-project-templates).
44+
You can create your own project templates. For more information, see [Create project templates](/visualstudio/ide/how-to-create-project-templates).
4145

4246
After you create a project, it appears in the [Solution Explorer](/visualstudio/ide/solutions-and-projects-in-visual-studio) window:
4347

44-
![Screenshot of the Solution Explorer window, showing source files, header files, and resource files.](media/mathlibrary-solution-explorer-153.png)
48+
:::image type="content" source="media/mathlibrary-solution-explorer-153.png" alt-text="Screenshot of the Solution Explorer window, showing source files, header files, and resource files.":::
4549

46-
When you create a new project, a solution file (.sln) is also created. A *Visual Studio solution* is a collection of one or more projects. You can add another project to the solution by right-clicking the solution name in **Solution Explorer** > **Add** > **New project**.
50+
When you create a new project, a solution file (*`.sln`*) is also created. A *Visual Studio solution* is a collection of one or more projects. You can add another project to the solution by right-clicking the solution name in **Solution Explorer** > **Add** > **New project**.
4751

4852
The solution file coordinates build dependencies when you have multiple related projects. Compiler options are set at the project level.
4953

@@ -61,28 +65,28 @@ For more information about consuming a library that you have downloaded by using
6165
- [vcpkg in MSBuild projects](/vcpkg/users/buildsystems/msbuild-integration)
6266
- [Tutorial: Install and use packages with MSBuild in Visual Studio](/vcpkg/get_started/get-started-msbuild)
6367

64-
They're also commercial third-party libraries that you can install. Follow their installation instructions.
68+
There are also commercial third-party libraries that you can install. Follow their installation instructions.
6569

6670
## Set compiler options and build properties
6771

68-
To configure build settings for a project, right-click on the project in **Solution Explorer** and choose **Properties**. For more information, see [Set C++ compiler and build properties in Visual Studio](working-with-project-properties.md).
72+
To configure build settings for a project, right-click on the project in **Solution Explorer** and choose **Properties**. For more information, see [Set compiler and build properties](working-with-project-properties.md).
6973

7074
## Compile and run a project
7175

72-
To compile and run the new project, press **F5** or click the *debug dropdown* with the green arrow on the main toolbar. The *configuration dropdown* is where you choose whether to perform a *Debug* or *Release* build (or some other custom configuration).
76+
To compile and run the new project, press **F5** or select the *debug dropdown* with the green arrow on the main toolbar. The *configuration dropdown* is where you choose whether to perform a *Debug* or *Release* build (or some other custom configuration).
7377

7478
A new project compiles without errors. When adding your own code, you might occasionally introduce an error or trigger a warning. An error prevents the build from completing; a warning doesn't. All errors and warnings appear both in the Output Window and in the Error List when you build the project.
7579

76-
![Screenshot of the Output window and Error list, showing a syntax error for a misplaced colon.](../overview/media/vs2017-output-error-list.png)
80+
:::image type="content" source="../overview/media/vs2017-output-error-list.png" alt-text="Screenshot of the Output window and Error list, showing a syntax error for a misplaced colon.":::
7781

7882
In the **Error List**, you can press **F1** on the highlighted error to go to its documentation topic.
7983

80-
## See also
84+
## Related content
8185

82-
[Create a project from existing code](how-to-create-a-cpp-project-from-existing-code.md)\
83-
[Set C++ compiler and build properties in Visual Studio](working-with-project-properties.md)\
84-
[Custom build steps and build events](understanding-custom-build-steps-and-build-events.md)\
85-
[Reference libraries and components at build time](adding-references-in-visual-cpp-projects.md)\
86-
[Organize project output files](how-to-organize-project-output-files-for-builds.md)\
87-
[Projects and build systems](projects-and-build-systems-cpp.md)\
88-
[Microsoft C++ porting and upgrade guide](../porting/visual-cpp-porting-and-upgrading-guide.md)
86+
- [Create a project from existing code](how-to-create-a-cpp-project-from-existing-code.md)
87+
- [Set C++ compiler and build properties in Visual Studio](working-with-project-properties.md)
88+
- [Custom build steps and build events](understanding-custom-build-steps-and-build-events.md)
89+
- [Reference libraries and components at build time](adding-references-in-visual-cpp-projects.md)
90+
- [Organize project output files](how-to-organize-project-output-files-for-builds.md)
91+
- [Projects and build systems](projects-and-build-systems-cpp.md)
92+
- [Microsoft C++ porting and upgrade guide](../porting/visual-cpp-porting-and-upgrading-guide.md)

docs/build/creating-precompiled-header-files.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ This table lists compiler options that might trigger an inconsistency warning wh
140140

141141
| Option | Name | Rule |
142142
|--|--|--|
143-
| **`/D `**| Define constants and macros | Must be the same between the compilation that created the precompiled header and the current compilation. The state of defined constants isn't checked. However, unpredictable results can occur if your files depend on the values of the changed constants. |
143+
| **`/D`**| Define constants and macros | Must be the same between the compilation that created the precompiled header and the current compilation. The state of defined constants isn't checked. However, unpredictable results can occur if your files depend on the values of the changed constants. |
144144
| **`/E`** or **`/EP`** | Copy preprocessor output to standard output | Precompiled headers don't work with the **`/E`** or **`/EP`** option. |
145145
| **`/Fr`** or **`/FR`** | Generate Microsoft Source Browser information | For the **`/Fr`** and **`/FR`** options to be valid with the **`/Yu`** option, they must also have been in effect when the precompiled header was created. Subsequent compilations that use the precompiled header also generate Source Browser information. Browser information is placed in a single *`.sbr`* file and is referenced by other files in the same manner as CodeView information. You can't override the placement of Source Browser information. |
146146
| **`/GA`**, **`/GD`**, **`/GE`**, **`/Gw`**, or **`/GW`** | Windows protocol options | Must be the same between the compilation that created the precompiled header and the current compilation. The compiler emits a warning if these options differ. |
@@ -161,7 +161,6 @@ The code base of a software project is often contained in multiple C or C++ sour
161161

162162
The figure uses three diagrammatic devices to show the flow of the build process. Named rectangles represent each file or macro; the three macros represent one or more files. Shaded areas represent each compile or link action. Arrows show which files and macros are combined during the compilation or linking process.
163163

164-
![ The diagram is described in the text following the diagram.]()\
165164
Structure of a makefile that uses a precompiled header file:
166165

167166
:::image type="complex" source="media/vc30ow1.gif" alt-text="Diagram showing example inputs and outputs of a makefile that uses a precompiled header file.":::
15.6 KB
Loading
-34.9 KB
Loading
-45.5 KB
Loading

docs/build/reference/base-base-address.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
---
22
description: "Learn more about: /BASE (Base address)"
33
title: "/BASE (Base address)"
4-
ms.date: 05/11/2022
4+
ms.date: 03/27/2025
55
f1_keywords: ["/base", "VC.Project.VCLinkerTool.BaseAddress"]
66
helpviewer_keywords: ["base addresses [C++]", "programs [C++], preventing relocation", "semicolon [C++], specifier", "-BASE linker option", "key address size", "environment variables [C++], LIB", "programs [C++], base address", "LIB environment variable", "BASE linker option", "DLLs [C++], linking", "/BASE linker option", "@ symbol for base address", "executable files [C++], base address", "at sign symbol for base address"]
7-
ms.assetid: 00b9f6fe-0bd2-4772-a69c-7365eb199069
87
---
98
# `/BASE` (Base address)
109

@@ -23,7 +22,7 @@ The **`/BASE`** linker option sets a base address for the program. It overrides
2322

2423
The linker issues an error if *`address`* isn't a multiple of 64K. You can optionally specify the size of the program. The linker issues a warning if the program can't fit in the size you specified.
2524

26-
On the command line, another way to specify the base address is by using a *base address response file*. A base address response file is a text file that contains the base addresses and optional sizes of all the DLLs your program uses, and a unique text key for each base address. To specify a base address by using a response file, use an at sign (**`@`**) followed by the name of the response file, *`filename`*, followed by a comma, then the *`key`* value for the base address to use in the file. The linker looks for *`filename`* in either the specified path, or if no path is specified, in the directories specified in the `LIB` environment variable. Each line in *`filename`* represents one DLL and has the following syntax:
25+
On the command line, another way to specify the base address is by using a *base address response file*. A base address response file is a text file that contains the base addresses and optional sizes of all the DLLs your program uses, and a unique text key for each base address. To specify a base address by using a response file, use an at sign (**`@`**) followed by the name of the response file, *`filename`*, followed by a comma, then the *`key`* value for the base address to use in the file. The linker looks for *`filename`* in either the specified path, or if no path is specified, in the directories specified in the `LIB` environment variable. The fully qualified *`filename`* must not exceed `MAX_PATH` (260 characters). Each line in *`filename`* represents one DLL and has the following syntax:
2726

2827
> *`key`* *`address`* \[*`size`*] **`;`** *`comment`*
2928
@@ -35,7 +34,7 @@ one 0x28000000 0x00100000 ; for DLLONE.DLL
3534
two 0x28100000 0x00300000 ; for DLLTWO.DLL
3635
```
3736

38-
If the file that contains these lines is called DLLS.txt, the following example command applies this information:
37+
If the file that contains these lines is called `DLLS.txt`, the following example command applies this information:
3938

4039
```cmd
4140
link dlltwo.obj /dll /base:@dlls.txt,two
@@ -46,9 +45,7 @@ Another way to set the base address is by using the *`BASE`* argument in a [`NAM
4645
### To set this linker option in the Visual Studio development environment
4746

4847
1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).
49-
5048
1. Select the **Configuration Properties** > **Linker** > **Advanced** property page.
51-
5249
1. Modify the **Base Address** property.
5350

5451
### To set this linker option programmatically

docs/build/reference/def-specify-module-definition-file.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
---
22
description: "Learn more about: /DEF (Specify module-definition file)"
33
title: "/DEF (Specify module-definition file)"
4-
ms.date: 09/09/2022
4+
ms.date: 03/27/2025
55
f1_keywords: ["VC.Project.VCLinkerTool.ModuleDefinitionFile", "/def"]
66
helpviewer_keywords: ["module definition files, specifying", "DEF linker option", "-DEF linker option", "module definition files", "/DEF linker option"]
7-
ms.assetid: 6497fa68-65f0-48ca-8f66-b87166fc631a
87
---
98
# `/DEF` (Specify module-definition file)
109

@@ -17,7 +16,7 @@ Specifies a module-definition file to the linker.
1716
## Arguments
1817

1918
*`filename`*\
20-
The name of a module-definition file (*`.def`*) to be passed to the linker.
19+
The name of a module-definition file (*`.def`*) to be passed to the linker. When expanded, the fully qualified filename must not exceed `MAX_PATH` (260 characters).
2120

2221
## Remarks
2322

@@ -28,9 +27,7 @@ To specify a *`.def`* file from within the development environment, add it to th
2827
### To set this linker option in the Visual Studio development environment
2928

3029
1. Open the project's **Property Pages** dialog box. For more information, see [Set compiler and build properties](../working-with-project-properties.md).
31-
3230
1. Select the **Configuration Properties** > **Linker** > **Input** property page.
33-
3431
1. Modify the **Module Definition File** property. Choose **OK** or **Apply** to save your changes.
3532

3633
### To set this linker option programmatically

docs/build/reference/dynamic-deopt-linker.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ Builds the deoptimized output after building the optimized output instead of in
3333

3434
This preview flag, available starting with Visual Studio 2022 Version 17.14 Preview 2, applies only to x64 projects.
3535

36+
IncrediBuild 10.24 supports C++ Dynamic Debugging builds.\
37+
FastBuild v1.15 supports C++ Dynamic Debugging builds.
38+
3639
### Set this linker option in the Visual Studio development environment
3740

3841
1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md).

docs/build/reference/dynamic-deopt.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "/dynamicdeopt (Enable C++ Dynamic Debugging (Preview))"
33
description: "Enable the Microsoft C++ compiler option /dynamicdeopt to use C++ Dynamic Debugging."
4-
ms.date: 03/20/2025
4+
ms.date: 04/01/2025
55
f1_keywords: ["/dynamicdeopt"]
66
helpviewer_keywords: ["-dynamicdeopt compiler option [C++]", "dynamicdeopt compiler option [C++]"]
77
---
@@ -41,6 +41,9 @@ Compiling with `/dynamicdeopt` generates other binaries that are used for debugg
4141
If you specify `/INCREMENTAL`, the compiler generates a warning and automatically turns off `/INCREMENTAL`.
4242
If you specify `/OPT:ICF`, the compiler generates a warning that the debug experience isn't as good. This is because ICF can cause functions to be removed from the alt file, which means you can't step into them.
4343

44+
IncrediBuild 10.24 supports C++ Dynamic Debugging builds.\
45+
FastBuild v1.15 supports C++ Dynamic Debugging builds.
46+
4447
`/dynamicdeopt` is incompatible with edit-and-continue and the following compiler switches:
4548

4649
```cpp

docs/build/reference/genprofile-fastgenprofile-generate-profiling-instrumented-build.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "/GENPROFILE, /FASTGENPROFILE (Generate Profiling Instrumented Build)"
33
description: "Learn more about: /GENPROFILE, /FASTGENPROFILE (Generate Profiling Instrumented Build)"
4-
ms.date: 04/14/2021
4+
ms.date: 03/27/2025
55
f1_keywords: ["GENPROFILE", "FASTGENPROFILE", "/GENPROFILE", "/FASTGENPROFILE"]
66
helpviewer_keywords: ["GENPROFILE", "FASTGENPROFILE"]
77
---
@@ -43,7 +43,7 @@ Use **`PATH`** to specify a separate set of PGO counters for each unique path t
4343
Specifies whether to use extra counters to keep an accurate count when exceptions are thrown during training. Use **`TRACKEH`** to specify extra counters for an exact count. Use **`NOTRACKEH`** to specify single counters for code that doesn't use exception handling or that doesn't run into exceptions in your training scenarios. When you specify **`/GENPROFILE`**, the default is **`TRACKEH`** . When you specify **`/FASTGENPROFILE`**, the default is **`NOTRACKEH`** .
4444

4545
**`PGD`**=*filename*\
46-
Specifies a base file name for the *`.pgd`* file. By default, the linker uses the base executable image file name with a *`.pgd`* extension.
46+
Specifies a base filename for the *`.pgd`* file. By default, the linker uses the base executable image filename with a *`.pgd`* extension. When expanded, the fully qualified filename must not exceed `MAX_PATH` (260 characters).
4747

4848
## Remarks
4949

0 commit comments

Comments
 (0)