vs中c++项目的配置

el/2024/7/13 12:06:32

首先,我们一般不会修改解决方案的属性,而是设置每个项目各自的属性.

接着上一篇文章,我们来看看我们应该怎样来设置各项目的项目属性更好:

我们以NYOJ_001项目的Debug版的设置为例:

在常规选项里,我们一般会设置输出目录(即生成.exe文件的目录),中间目录(即中间文件的目录)。当然你也可以在这里设置生成的.exe文件的文件名甚至扩展名等。

如下图所示:

一般设置如下的目录:如果不记得某个宏变量的值,可以点击“宏(M)>>”来查看。

既然我们修改了输出文件的目录,那我们也必须修改我们的调试目录,不然就无法调试了。不信你运行一下试试,虽然编译通过了,但并没像你想的那样出现控制台的“黑窗口”,原因就是我们没有修改调试目录:

将调试目录修改为$(OutDir)就可以了,$(OutDir)就是我们之前在常规里设置的输出文件的目录:

这里面的命令参数一项也是比较重要的,如果你开发的是一个带有命令行参数的项目,你调试的时候就可以在这里设置传给程序的命令行参数来进行调试了。你是否还记得你运行一个带有命令行参数的程序时是出现一个黑框框然后马上就消失了,什么也不会做,除非你是将该程序拖到命令提示符下运行。

这些设置完后,可以先编译运行一下程序,结果如下所示:

程序可以正常调试,还会在解决方案的根目录下生成我们设置的输出文件的目录:Win32\Debug\Bin,生成的.exe文件就在该目录下。还有中间文件目录:Win32\Debug\XXX,里面放的都是生成的中间文件。如果你的这个项目里用到了其他的库,你还需要像下面这样设置你的项目的附加包含目录和附加库目录:前都是设置其他库的.h头文件的目录,一般放在库的include文件夹下。后者是设置其他库的lib以及.dll链接库的目录,一般放在库的lib下。如下:

最后你还必须设置项目的附加依赖项的值:一般设置的就是xx.lib静态链接库的名称

好了,所有必须设置的都已经设置完成了。

下面还有一个非常有用的设置,我们知道当我们的程序使用在其他的库的dll文件时,在程序的当前目录或环境变量指定的目录中必须能够找得到这些.dll文件,即现在我们打开.exe文件所在的Bin文件夹,双击运行程序,除非你设置了所依赖的dll的环境变量,否则程序仍然无法运行,因为程序无法找到dll模块。你可以手动把这些.dll拷贝到.exe文件所在的文件夹,但现在有一个更好的办法,如下图:

我们可以在上面的命令行中填写我们在重新生成完程序后,执行的命令。我们可以在这里使用copy命令,来将程序需要的.dll文件自动拷贝到.exe文件所在的目录。当然,在这里你可以做更多的事情,比如如果你的程序需要读取配置文件,你也可以把配置文件拷贝过来等。

最后,把配置由Debug改变Release再将Release下的所有这些设置重新设置成Debug相同的就可以了。

路径推荐使用编译器提供给我们的宏变量,而尽量不要使用绝对的名称,这样程序更具有移植性。例如,如果某外部库的目录为Win32\Debug与Win32\Release或Win64\Debu与Win64\Release。这样我们使用$(Platform)\$(Configuration)进行设置的时候就不需要再去管什么平台以及是Debug还是Release版本。因为编译器会自动为我们切换,当选择Debug进行编译时,编译器会自动链接到Debug版本,当选择Release进行编译时,会自动链接到Release版本。

还要注意的就是,如果有某些项目是作为导出链接库用的。需要把导出的dll, lib(即输出文件路径)设置到上面的Bin目录下。然后在需要使用导出的dll和lib文件的项目中设置

项目依赖项这前者,并设置附加库目录和附加依赖项。这样可以很方便的使用同一解决方案中其他项目导出的链接库了。

以上就是我们一般需要设置的项目属性。
 


http://www.ngui.cc/el/5545754.html

相关文章

关于opencv中Mat赋值(浅拷贝,深拷贝)原理

问题点: 有两个垫对象:mat_1和mat_2将mat_2赋值给mat_1(mat_1 mat_2)后,改变mat_1,mat_2也会被改变(这里的改变是指图像处理)。 原因: mat_1 mat_2是浅拷贝&#xff0…

c#中获取控件窗体句柄,获取窗体等的一些操作

1.Control.Handle 就是获取控件绑定到的窗口句柄。 2.control.IsHandleCreated 控件是否有与其关联的句柄 3.WinForm自定义函数FindControl实现按名称查找控件 public static Control FindControl(Control parentControl, string findCtrlName) { Control _findedCon…

c#滚动条创建实例,多线程

1.滚动条 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplicati…

用最小二乘法拟合任意次函数曲线(C#)

///<summary> ///用最小二乘法拟合二元多次曲线 ///</summary> ///<param name"arrX">已知点的x坐标集合</param> ///<param name"arrY">已知点的y坐标集合</param> ///<param name"length&qu…

C#操作快捷方式(获取快捷方式属性、创建快捷方式)

第一步 创建一个项目 无需废话&#xff0c;跳过。 第二步 引用COM组件 右键“引用”&#xff0c;“添加引用”&#xff0c;选择“COM组件”&#xff0c;找到“Windows Script Host Object Model”&#xff0c;然后确定。 第三步 编写创建快捷方式的代码 1 // 声明操作对…

让使用SQLite的.NET应用自适应32位/64位系统

Windows 7 64 bit(刚扩到4G内存,果断换64位的,那速度杠杠的) Microsoft Visual Studio 2010 Ultimate 32bit(在64位系统里运行正常) sqlite-netFx40-setup-bundle-x64-2010-1.0.90.0 首先要先下载SQLite的开发环境安装包(我是这么理解的,貌似只搞到System.Data.SQLite.dll这个文…

C#使用DataContractJsonSerializer来进行JSON解析

在使用DataContractJsonSerializer进行解析之前&#xff0c;我们首先需要将两个包引入进来&#xff1a; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; 接下来需要新建一个class&#xff0c;DataContractJsonSerializer可以将JSON字符串转化…

QT操作sqlite概念

SQLite数据库 增、删、改、查 1. 数据库简介 数据库指的是以一定方式存储在一起&#xff0c;能为多个用户共享&#xff0c;具有尽可能小的冗余度的特点&#xff0c;是与应用程序彼此独立的数据集合。 // 一定方式&#xff1a;可以理解为策略、算法 // 网盘相同的文件是以 MD…

QT中全局变量的定义和使用

多的就不说了&#xff0c;本来就是一个简单地内容&#xff0c;只是不会的话会很头疼 我们首先新建两个文件&#xff0c;文件名可以自定义&#xff0c;我们在这里定义为variate.h 和 variate.cpp 当然了&#xff0c;后缀是不能变的。 和函数一样&#xff0c;我们在variate.h中…

C语言中指针动态内存的申请和释放

什么是动态内存的申请和释放&#xff1f; 当程序运行到需要一个动态变量时&#xff0c;需要向系统的堆中申请一块内存&#xff0c;用来存储这块变量&#xff0c;这就是内存的申请。当程序不需要这个变量时&#xff0c;就需要把申请的这块内存释放掉&#xff0c;这就是内存的释放…