visual studio 解决方案和项目配置问题
如何优雅的在visual studio2022 做练习
问题概述
想学习一些C++的基础语法以及数据结构和算法,该如何使用visual studio创建项目呢?一个解决方案如何包含多个项目?build输出的文件杂乱找不到想要的文件?这是遇到的一些问题,这节课需要解决这些问题。
创建一个项目



这里创建一个空的C++项目,注意这里解决方案和项目放同一目录不打勾。

这里左边框中的三个文件其实是过滤器,实际上并不存在,你删了也可以,不会对后续造成影响。我们可以右键ex1这个项目,在文件资源管理器中打开文件夹查看,里面其实只有下面三个文件。

文件说明
| 文件 / 文件夹 | 核心作用 | 是否可删 | 说明 |
|---|---|---|---|
ex1.vcxproj |
编译配置 | ❌ 不可删 | 项目就打不开,不要手动修改 |
ex1.vcxproj.filters |
内文件可视化分类 | ✅ 可删 | 删了仅文件显示杂乱,不影响编译,会自动再生 |
ex1.vcxproj.user |
用户个性化调试配置 | ✅ 可删 | 删了丢失个人断点 / 工作目录,会自动再生 |
我们可以点击解决方案资源管理器的显示所有文件(下图中紫色的框,就在小扳手左边)显示实际的文件结构,可以发现是空的,因为我们创建的就是空项目。

现在我们右键添加新建文件夹就是实际的文件夹,不然在筛选器的那种模式下添加的就是筛选器的文件夹了。
我们新建一个src文件夹并写一个"hello world"吧。编译运行后:


可以看到它会在D:\CodeLearning\learn_cpp\cpp_ch01\这个解决方案文件夹下,x64平台,Debug模式,链接器会生成一个exe文件。当然还有一些中间文件会生成在项目文件夹下的x64/Debug/中。

#include <iostream>
int main()
{
std::cout << "hello,world" << std::endl;
return 0;
}
我们一般不会按照这种默认配置,因为这使得我们的程序的中间文件和最终的输出文件分离开了。
目前结构输出:
|--- solutionDir/
|--- project1/
|--- x64
|--- Debug
|--- .obj etc 中间文件
|--- project2/
|--- x64
|--- Debug
|--- .obj etc 中间文件
|--- x64
|--- Debug
|--- project1.exe
|--- project2.exe
|--- .sln(解决方案)
我们需要修改一下输出目录和中间目录,让其可以满足以下形式,让输出的文件在解决方案的bin文件夹下,里面区分项目的输出和项目的中间文件。
|--- solutionDir/
|--- project1/
|--- project2/
|--- bin
|--- project1
| --- project1.exe(bin\project1\x64\Debug)
|--- project2
| --- project2.exe(bin\project2\x64\Debug)
|--- intermediates
|--- project1
|--- project2
|--- .sln(解决方案)
我们需要在项目的属性中做如下配置。
输出目录:$(SolutionDir)bin\$(ProjectName)\$(Platform)\$(Configuration)\
中间目录:$(SolutionDir)bin\intermediates\$(ProjectName)\$(Platform)\$(Configuration)\

这样我们生成的文件输出和中间文件就在bin文件夹中了,而且区分了项目名。
为多个项目名统一配置
那后面创建新项目的时候还要右键属性对项目进行手动输入配置吗?
那肯定是不用的
我们可以在解决方案的文件夹中新建一个Directory.Build.props,然后输入以下配置。
<Project>
<PropertyGroup>
<OutDir>$(SolutionDir)bin\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)bin\intermediates\$(MSBuildProjectName)\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
</Project>

再这之后的新建项目都是我们期望的输出形式了,很清爽的形式。

浙公网安备 33010602011771号