vs解决方案和项目工程_vs的解决方案和项目什么关系-程序员宅基地

技术标签: C++  

解决方案和项目文件夹的包含关系

  假设新建一个项目ssyy1,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层目录为fangan代表整个解决方案的内容都在这个文件夹内。在这个fangan文件夹内包含有fangan.sln的解决方案配置文件和一个ssyy1文件夹,ssyy1文件夹代表整个ssyy项目的所有内容都在这个文件夹内,这个文件夹内含有ssyy1.vcproj的项目配置文件和.h头文件以及.cpp源文件。如果在fangan解决方案下再建立一个新项目名为ssyy2,则会在fangan文件夹下生成一个ssyy2文件夹存放ssyy2项目的所有内容。
  如果没有单独给出解决方案名和项目名称的情况下,默认解决方案名称和项目名称相同,通常都是一个解决方案中仅包含一个项目。最好取名不相同,在创建好一个解决方案后可以再添加新的项目。

  管理器(解决方案或项目)都会对应一个总的文件夹,这个管理器文件夹下存放本管理器的配置文件以及子管理器。比如,解决方案是个管理器,它的文件夹下含有.sln配置文件以及子管理器ssyy1项目和子管理器ssyy2项目。

  默认情况下,项目属性设置的目录起点为项目配置文件所在位置,实际上就是项目头文件和源文件所在位置。

  对于C++项目,则解决方案总文件夹下就只包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共个东东,其中Debug和Release文件夹中存放最终生成的结果exe或dll,要注意如果不使用Release生成,则不存在Release文件夹),而项目总文件夹下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(一定要注意,此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西。如果不使用Release编译,则没有对应的Release文件夹)。

解决方案下的文件都有什么?

fangan文件夹下:
在这里插入图片描述
结构如看起来比较变态
,想看就看。在这里插入图片描述

解决方案(fangan.sln)文件

  解决方案就是Visual Studio中用来组织项目的结构。.sln文件包含基于文本编写的信息,可用ultraedit打开,编译环境通过这些信息找到并且加载他引用到的持久数据和VSPackages项目。当用户打开解决方案的时候编译环境通过包含在.sln文件中的preSolution,Project,postSolution信息加载解决方案,包含在解决方案中的项目以及任何和解决方案有联系的持久信息。


1.文件版本(运行平台信息)
Microsoft Visual Studio Solution File, Format Version 12.00
#Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1


2.工程信息(包含的项目信息)
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = “ssyy1”, “ssyy1\ssyy1.vcxproj”, “{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}”
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = “ssyy2”, “ssyy2\ssyy2.vcxproj”, “{4773F960-EFEC-4C69-B583-671A3237EE72}”
EndProject
项目全局唯一标识符(GUID)以及项目类型的全局唯一标识符(GUID)

前面的"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"是项目类型全局统一标识符,项目的全局唯一标识符(GUID)被传递到IVsProjectFactory用来加载和项目有关的特殊的VSPackage,然后这个项目被载入。在上面的代码中被载入的VSPackage是Windows (Visual C++) ,因为我们创建的两个项目ssyy1、ssyy2都是Visual C++项目。

后面的"{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}"是项目实例全局唯一标识符,用于在该解决方案中标识该项目的唯一性。每个项目中都存在一个唯一的项目实例ID,只有这样这个项目才能被其他解决方案中需要他的项目使用。理想状态下,如果解决方案和项目在源代码控制之下,项目的路径应该和解决方案的路径是相关的。当解决方案被第一次加载时,项目文件不能够存在于用户的电脑中。将项目文件存放在和解决方案文件相关的服务文件中,通过这个方法将相对简单的找到项目文件或者将项目文件复制到用户的电脑中。然后编译环境复制并加载剩下的项目所需文件。

GUID是确定的值:

部分VS项目GUID罗列如下:

Windows (C#)           {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
Windows (VB.NET)       {
    F184B08F-C81C-45F6-A57F-5ABD9991F28F}
Windows (Visual C++)   {
    8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
Web Application        {
    349C5851-65DF-11DA-9384-00065B846F21}
Web Site               {
    E24C65DC-7377-472B-9ABA-BC803B73C61A}
WCF                    {
    3D9AD99F-2412-4246-B90B-4EAA41C64699}
WPF                    {
    60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}
XNA (Windows)          {
    6D335F3A-9D43-41b4-9D22-F6F17C4BE596}
XNA (XBox)             {
    2DF5C3F4-5A5F-47a9-8E94-23B4456F55E2}
XNA (Zune)             {
    D399B71A-8929-442a-A9AC-8BEC78BB2433}
Silverlight            {
    A1591282-1198-4647-A2B1-27E5FF5F6F3B}
ASP.NET MVC            {
    F85E285D-A4E0-4152-9332-AB1D724D3325}
ASP.NET MVC 4          {
    E3E379DF-F4C6-4180-9B81-6769533ABE47}
Test                   {
    3AC096D0-A1C2-E12C-1390-A8335801FDAB}
Solution Folder        {
    2150E333-8FDC-42A3-9474-1A3956D46DE8}

3.全局设置(全局变量)
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x64.ActiveCfg = Debug|x64
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x64.Build.0 = Debug|x64
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x86.ActiveCfg = Debug|Win32
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Debug|x86.Build.0 = Debug|Win32
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x64.ActiveCfg = Release|x64
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x64.Build.0 = Release|x64
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x86.ActiveCfg = Release|Win32
{D1345DA1-6889-443F-975E-8FB1FEFEC1BC}.Release|x86.Build.0 = Release|Win32
{4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x64.ActiveCfg = Debug|x64
{4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x64.Build.0 = Debug|x64
{4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x86.ActiveCfg = Debug|Win32
{4773F960-EFEC-4C69-B583-671A3237EE72}.Debug|x86.Build.0 = Debug|Win32
{4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x64.ActiveCfg = Release|x64
{4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x64.Build.0 = Release|x64
{4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x86.ActiveCfg = Release|Win32
{4773F960-EFEC-4C69-B583-671A3237EE72}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

preSolution和postSolution分别是在solution启动前启动后执行的操作。


fangan.VC.db

  用vs2015创建Visual C++项目,编写生成后,每次都会生成一个project_name.VC.db文件,而且会随着你工程修改运行变的越来越大。

  project_name.VC.db是sqlite后端用于百intellisense的新数据库,度相当于之前的*.sdf SQL Server Compact数据库。它与VS2015提供的智能感知、代码恢复、团队本地仓库内功能有关,VS重新加载解决方案时速度超快。如果不需要,可以禁止,就不会产生该文容件了。

  如果你不想生成该文件或不需要生成该文件的话可以通过以下方式取消:
设置方法:工具–》选项–》文本编辑器–》C/C++–》高级,把回退位置和警告设置为true或者禁用数据库设为true,这样就不会产生那个文件了。


项目文件夹

ssyy1文件夹
在这里插入图片描述

ssyy1.vcxproj

  vcxproj是工程的配置文件问,管理工程中细节比如包含的文件,引用库等。一般没有sln,也答可以专直接打开vcxproj,也可以重新生成sln。

*.vcproj:VS2008以及VS2008之前版本的VS工程文件
*.vcxproj:VS2010以及VS2010之后版本的VS工程文件

ssyy1.vcxproj.filters

  *.vcxproj.filters就是用于项目下文件的虚拟目录,不能丢弃。可理解为视图文件,定义了工程在VS中打开后的目录结构,修改该文件后重新build时vs不会重新build工程。vcxproj.filters文件是过滤信息文件,解决方案中的筛选器文件就保存在此文件中。

vcxproj.user是本地化用户配置,允许多个用户使用自己喜好的方式配置这个项目(例如打开项目时候窗体位置等与项目内容无关的配置), 不需要添加到版本控制中。

ssyy1/Debug文件夹

在这里插入图片描述
  在解决方案目录下的是最终文件(即可执行文件)存放的目录,在工程目录下的是中间文件(编译生成的.obj等其他文件)存放的目录,中间文件对用户来说没什么用的,只是在链接成最终文件时有用到。Debug只是为调试人员存在的。

ssyy1_main.obj文件: 由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。有几个cpp就生成几个obj文件,单独编译的,之间没有联系。因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj目录的作用就是保存这些小块的编译结果,加快编译速度。

ssyy1.log文件: 日志记录文件,是文本内容。

ssyy1_main.cpp
ssyy1_cpp1.cpp
正在生成代码…
ssyy1.vcxproj -> D:\Cpp_excerise\fftw_test\fftw_test_64bit\fangan\Debug\ssyy1.exe
ssyy1.vcxproj -> D:\Cpp_excerise\fftw_test\fftw_test_64bit\fangan\Debug\ssyy1.pdb (Partial PDB)

ssyy1.Build.CppClean.log: 当点击“重新生成解决方案”的时候会有,否则没有。
ssyy1.tlog文件夹:相关记录文件,比如编译时候用到的库的头文件等;

.pdb 是存放代码中断点等调试信息的,程序的pdb既是输出文件又是输入文件,因为LINK在重新构建程序时更新pdb。
.idb 是记录了哪些文件是修改过的,需要重新编译的。
.pch 是预编译头文件,存放工程中较稳定的代码。

ssyy1/Release文件夹

在这里插入图片描述
除了少一个vc140.idb文件,其他的和ssyy1/Debug功能一样。

x64

在这里插入图片描述
在64平台上重新运行了一遍,和32平台上一样的过程。

整个解决方案的Debug

在这里插入图片描述
  调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug只是为调试人员存在的。
.ilk文件:当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信。

整个解决方案的Release

  发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。
在这里插入图片描述


项目之间的关系

  在一个解决方案(solution)中是可以添加多个项目(project)的,这多个项目之间存在两种关系:1.项目间彼此独立,各自有各自的入口,只是组织在一个解决方案中便于管理;2.项目间存在相互调用,只存在一个入口。

项目间彼此独立

  项目间彼此独立,每个项目都有自己的入口,则同一时间解决方案只能有一个活动入口,相当于只有一个项目存在,通过设置可以选择哪个项目作为活动项目,则之后的编译、运行都是针对该项目的。
  更改方法:在选择的项目名上右键选择“设为启动项目。变成粗黑体就可以了。
在这里插入图片描述
在 生成->配置管理器 中,可以给每个项目设置单独的运行平台,互相之间不干扰。
在这里插入图片描述

项目间存在引用关系

  一个解决方案包含多个项目,其中一个主项目,依赖其余数个子项目的库文件,我们希望每次只需要编译主项目,就能自动编译依赖项目。
  在vs2015项目中,选中“解决方案”的属性,如下图所示,可以确定各个项目依赖关系。
在这里插入图片描述

在同一个解决方案下,如何从一个工程中调用另外一个工程的函数?

  
下面在ssyy2项目中引用ssyy1项目:
VS 中项目引用或第三方包引入需要处理3个部分:
A.解决方案属性配置
解决方案属性-》通用属性-》项目依赖项-》ssyy2依赖于ssyy1;
在这里插入图片描述
B. 头文件:

  • ssyy2项目属性面板中, “C++ 常规/附加包含目录”, 将ssyy1项目中的test.h的头文件所在目录包含进去;
  • 在ssyy2项目中 #include"test.h";

C. 库文件:

  • ssyy2项目属性/链接器/常规/附加库目录: 选择ssyy1.lib的输出目录(里面有 lib文件的)
  • ssyy2项目属性/链接器/输入/附加依赖项: 添加ssyy1.lib

运行成功~


Okay, Let’s enjoy it~


参考链接

本篇blog主要是参考以下网页链接,感谢各位作者们的工作。

https://www.cnblogs.com/alinh/p/8066820.html
https://blog.csdn.net/baidu_39511645/article/details/78423725
https://www.cnblogs.com/beijiguangyong/archive/2011/06/02/2302768.html
https://blog.csdn.net/weixin_33859844/article/details/93763799
https://www.cnblogs.com/hustdc/p/6538510.html
https://blog.csdn.net/qq_20828983/article/details/75593441
http://ask.zol.com.cn/x/10710931.html

ps:由于文章写转载的时候只能填写一个链接,所以只选取我认为参考最多的那个链接作为转载链接。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011913417/article/details/105492859

智能推荐

STM32CubeMX使用-程序员宅基地

文章浏览阅读1.4k次。一、新建工程首先,打开,第一次使用的朋友可以点击右侧的和检查一下软件更新并且找到对应芯片的固件库然后下载,软件和固件库都推荐是使用最新版的,这里不多介绍。完毕之后点击来创建一个新的工程。在弹出的界面中找到并选择对应芯片型号,可以在左上角的对话框中搜索,选中后点击来新建工程。_stm32cubemx

repeater里绑定dropdownlist控件各行的值-程序员宅基地

文章浏览阅读111次。//repeater绑定数据事件绑定答案dropdownlist protected void rpQuestionAnswer_ItemDataBound(object sender, RepeaterItemEventArgs e) { DropDownList ddl = e.Item.FindControl("drpRightAnswe..._repeater设置dropdownlist的值

教资科目一如何备考?_教资科目一选择题怎么复习-程序员宅基地

文章浏览阅读233次。科目一的选择题确实有点难,其实每一年的可以选择题都有点偏。给大家分享一下,科目一的一些相关备考知识!Q:都考什么内容?A:考试内容包括职业理念、教师职业道德、教育法律法规、文化素养、基本能力五大模块。各模块所占比重如下:Q:都有什么题型?A:试卷分为单选题、材料分析题和写作题三种题型,满分为150分。五个模块的内容在试卷中题型题量如下表:Q:考试难不难?A:科目一考查考生综合素质,属于规范化考试,命题严格依照考试大纲,难度非常稳定,易于把握规律,便于考生有针对性地复习。反之,如果对考情不了解,_教资科目一选择题怎么复习

java(数据库连接池)_java 多数据源连接池释放-程序员宅基地

文章浏览阅读438次。【代码】java(数据库连接池)_java 多数据源连接池释放

MOSFET热仿真_mosfet管在工作过程中的热性能仿真情况-程序员宅基地

文章浏览阅读1.7k次。功率电路中MOSFET的热研究原文:https://wenku.baidu.com/view/282066fa16fc700aba68fc16.html电源管理应用中的功率MOSFET的热分析方法原文:https://wenku.baidu.com/view/2c1b8bceda38376baf1fae78.html_mosfet管在工作过程中的热性能仿真情况

oracle新建用户、授权、修改密码、分配表空间、导入导出数据_oracle授权用户插入修改表-程序员宅基地

文章浏览阅读446次,点赞2次,收藏4次。oracle新建用户、授权、修改密码、分配表空间、导入导出数据**一**:在pl/sql中新建用户:一:在pl/sql中新建用户:创建用户: create user 用户名 identified by 密码; ;给用户授权:grant dba to 用户名;修改密码:alter user 用户名 identified by 新密码;创建表空间:create tablespace 表空间..._oracle授权用户插入修改表

随便推点

跑通yolox-s官方源码(可与yolov5s做对比试验)_yolox_s.pth-程序员宅基地

文章浏览阅读3.7k次,点赞8次,收藏37次。跑通yolox-s官方源码(可与yolov5s做对比试验)_yolox_s.pth

适用于渗透测试不同阶段的工具收集整理(转载)-程序员宅基地

文章浏览阅读1.1k次。Red Teaming / Adversary Simulation Toolkit该资源清单列表涵盖了一系列,适用于渗透测试不同阶段的开源/商业工具。如果你想为此列表添加贡献,欢迎你向我发送pull requestGithub:github.com/Snowming04内容侦察武器化交货命令与控制横向运动建立立足点升级特权数据泄露杂项参考侦察主动情报收集Ey..._gophish获取cookie

centos6.8服务器配置之编译安装PHP、配置nginx-程序员宅基地

文章浏览阅读122次。php version 5.6.31、nginx version: nginx/1.10.21、下载:wget http://cn2.php.net/distributions/php-5.6.31.tar.gz2、安装组件yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg li..._centos6 安装 libiconv.so.2

python pip 代理设置-程序员宅基地

文章浏览阅读682次。pip install --proxy="user:password@server:port" packagenameorigin url:http://xiuxixiuxi.blogspot.jp/2013/04/how-to-install-packages-with.htmlThere are two easy way to install packages for python (..._pip install --proxy=

Linux Deploy安装配置Ubuntu使用教程_linuxdeploy安装ubuntu-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏44次。记录Linux Deploy使用总结1. 前言最近换了一部新手机,老的手机荣耀play也不能空着。正好平时电脑装了个虚拟机Ubuntu来做开发/运维环境,有点占电脑配置,无法一边开虚拟机一边玩游戏,老是不能放心玩耍。于是萌生起用手机做Linux服务器的想法。安卓是基于Linux内核进行开发的,理论上是可以实现Linux部署的。百度研究了下(研究了2天。。。),特此记录一下,本位以Ubuntu为..._linuxdeploy安装ubuntu

Freemarker使用详解_freemarker使用教程-程序员宅基地

文章浏览阅读9.4k次,点赞5次,收藏57次。1.什么是网页静态化技术随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行。 什么是网页静态化技术呢?简单来说就是将网页以纯静态方式的形式展现。2.网页静态化技术与缓存技术的比较共同点:都可以减小数据库的访问压力。区别:(1)缓存技术适用于小规模的数据。以及一些经常变动的数据。(2)网页静态化技术适用于大规模但是变化不太频繁的数据。页面静态化与缓存技术的定义:页面静态化是指通过一些模板技术(如freemarker)将数据模型生成静态html页面并通过.._freemarker使用教程

推荐文章

热门文章

相关标签