常用宏定义
宏名称 | 功能 |
---|---|
$(SolutionDir) | 解决方案目录路径 |
$(ProjectDir) | 项目所在文件路径 |
$(ProjectName) | 项目名称 |
$(Configuration) | 当前配置器名称,如果是Debug,$(Configuration)为“Debug” |
$(TargetPath) | 包含可执行文件的路径,比如:“C:\Code\TestVTK\Debug\TestVTK.exe” |
在VS中比较常用的配置就是解决方案目录,项目目录,项目名称,根据这些配置项,可以设置相对路径,当从Git或SVN上下载解决方案,就不用配置头文件和库的目录;也避免了在代码中使用"./“和”…/"这些相对路径;
常用项目属性
常规
这里常用的项是:
1.输出目录:目标文件所在的文件目录;
2.中间目录:生成目标文件所生成的中间文件所在的文件路径;
3.目标文件名:生成目标文件的文件名,
如果是应用程序就是文件名.exe;
如果是静态库就是文件名.lib;
如果是动态库就是文件名.dll;
4.配置类型:有:应用程序(.exe);动态库(.dll);静态库(.lib);
5.平台工具集:VS的编译器版本,一般从VC6.0到当前最新的VS2019,对应的是V60-V142;不同VS版本编译出来的项目使用的平台工具集不同;如果你安装的VS不支持之前的项目,就需要安装Daffodil.ENU.msi或者对应的开发环境;
高级
这里常用的项有:
1.MFC的使用:
使用标准Windows库:使用默认Windows提供的基本库;
在静态库中使用 MFC:使用window提供的静态库;对应了C++生成方式为:MT/MTd;
在共享 DLL 中使用 MFC:使用window提供的动态库;对应C++生成方式为:MD/MDd;
2.字符集:
使用 Unicode 字符集:代码中使用Unicode编码;
使用多字节字符集:代码中使用多字符编码;一般情况下,程序都是用的是多字符字符集;
3.全程序优化:基本上不会修改,默认无全程序优化即可;
调试
用于调试程序时使用的配置选项
1.命令:包含可执行文件的全路径,比如当前项目生成动态库dll,那么使用这个dll的exe的路径为:C:\Code\TestVTK\Debug\TestVTK.exe;
2.命令参数:在运行可执行文件时,附加的命令参数,一般是控制台程序,在其后附加命令参数为main函数的char *argv;
3.工作目录:在“命令”配置项中,去掉可执行文件的文件名就是工作目录,也就是可执行文件所在目录;
VC++ 目录
用于配置项目依赖的第三方库的头文件和库文件所在文件夹位置;
1.包含目录:用于搜索使用第三方库的include文件夹;
2.库目录:用于搜索使用第三方库的lib文件夹;
C/C++
常规
1.附加包含目录:功能同“包含目录”,用于放置使用第三方库的头文件目录,或者放当前解决方案目录或项目目录,这样在代码中可以避免使用相对路径来对应头文件;
2.警告等级:可以选择编译器对代码错误的严格程度;
3.将警告视为错误:将所有编译器警告都视作错误;
优化
1.优化:在Debug模式和Release模式下,不同设置;Debug下使用“已禁用”;Release模式下使用“最大优化(优选速度) (/O2)”;
预处理器
1.预处理器定义:用于控制代码中的宏判断,就可以使用增加预处理器,控制代码中的开启;
代码生成
1.启用C++异常:如果想要捕获C语言异常,需要使用”是,但有 SEH 异常 (/EHa)“;
2.运行库:与MFC的使用配合使用,参照MFC的使用的说明;
MT是静态编译,将项目使用的库链接到生成文件中,不需要使用外部提供的dll;
MD是动态编译,在使用目标文件,需要额外提供dll等依赖文件;
3.结构成员对齐:结构体或类成员的对齐方式,如果写dll或lib,就需要和调用的exe的对齐方式保持一致,这样才能正确解析结构体内容;
预编译头
1.预编译头:可以选择"使用 (/Yu)";“创建 (/Yc)”;“不使用预编译头”;使用预编译头可以快速编译程序;不过在第三方的库中一般不适用预编译头;
2.预编译头文件:要预编译的头文件名;
链接器
常规
1.输出文件:同输出目录+输出文件名;
2.附加库目录:同库目标,是搜索依赖lib的文件夹路径;
输入
1.附加依赖项:项目依赖的lib文件名称;
2.忽略所有默认库和忽略特定默认库:一般情况不使用,在出现链接报错时,才会修改;
调试
1.生成程序数据库文件:用来放在调试的可执行程序的文件夹下,用来Debug调试;
系统
1.堆保留大小:指定虚拟内存中堆分配的合计大小。默认值时1MB;
2.堆栈保留大小:指定虚拟内存中堆栈分配的合计大小。默认值时1MB;
当提示栈溢出时,要么修改代码,减少栈空间使用;要么扩大栈空间;
高级
1.目录计算机:用来控制生成32位程序或者64位程序;