关于VS项目属性配置说明
一. 项目属性页面说明
1. 初建C++项目的VS界面说明
-
- 工程项目初建:在这里创建一个"基于对话框"的MFC项目,如下图描述
-
- 工程项目属性页:
(1) 活动解决方案配置
关于这一块的使用,见仁见智,这里只是举一个例子来进行说明。比如,现在需要两个程序,一个是表单的配置程序,一个加载表单后的功能程序,根据要求需要在一个工程里体现,一般我们会在现在工程上"新建一个项目"来实现。
在这里,我们可以换种方式,我们先创建一个新的方案“NewDebug”,如下图:
同时,我们定义一个宏
在主线程里我们写好界面生成的逻辑:
1 BOOL CVSTestApp::InitInstance() 2 { 3 // 如果一个运行在 Windows XP 上的应用程序清单指定要 4 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, 5 //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 6 INITCOMMONCONTROLSEX InitCtrls; 7 InitCtrls.dwSize = sizeof(InitCtrls); 8 // 将它设置为包括所有要在应用程序中使用的 9 // 公共控件类。 10 InitCtrls.dwICC = ICC_WIN95_CLASSES; 11 InitCommonControlsEx(&InitCtrls); 12 13 CWinApp::InitInstance(); 14 15 AfxEnableControlContainer(); 16 17 // 创建 shell 管理器,以防对话框包含 18 // 任何 shell 树视图控件或 shell 列表视图控件。 19 CShellManager *pShellManager = new CShellManager; 20 21 // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 22 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); 23 24 // 标准初始化 25 // 如果未使用这些功能并希望减小 26 // 最终可执行文件的大小,则应移除下列 27 // 不需要的特定初始化例程 28 // 更改用于存储设置的注册表项 29 // TODO: 应适当修改该字符串, 30 // 例如修改为公司或组织名 31 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); 32 33 #if _NEWDEBUG 34 CTestDlg objNewDlg; 35 m_pMainWnd = &objNewDlg; 36 INT_PTR nResponse = objNewDlg.DoModal(); 37 #else 38 CVSTestDlg dlg; 39 m_pMainWnd = &dlg; 40 INT_PTR nResponse = dlg.DoModal(); 41 42 if (nResponse == IDOK) 43 { 44 // TODO: 在此放置处理何时用 45 // “确定”来关闭对话框的代码 46 47 } 48 else if (nResponse == IDCANCEL) 49 { 50 // TODO: 在此放置处理何时用 51 // “取消”来关闭对话框的代码 52 CVSTestDlg dlg; 53 m_pMainWnd = &dlg; 54 dlg.DoModal(); 55 } 56 else if (nResponse == -1) 57 { 58 TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); 59 TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); 60 } 61 #endif 62 63 // 删除上面创建的 shell 管理器。 64 if (pShellManager != NULL) 65 { 66 delete pShellManager; 67 } 68 69 // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, 70 // 而不是启动应用程序的消息泵。 71 return FALSE; 72 }
在工程里,我们选择"NewDebug"配置,同时,我们给生成的程序重新指定个名字
然后我们编译,则在相关目录会生成一个"NewDebug"目录,同时生成"PropertyGrid.exe"程序。
而我们在工程里设置"Debug"配置时,则编译生成主程序如下:
测试代码:https://files.cnblogs.com/files/blogs/666666/VSTest.rar?t=1709730432&download=true
(2) 活动解决方案平台
工程代码的运行环境:取决于我们安装的系统,windows就有32位或64位,有时候可能会引起一些问题,我们需要注意保持运行平台的统一。
2. 工程项目属性:常规
-
- 路径宏:
-
- 平台工具集:用于指定用于编译和链接项目的编译器和工具版本。
- 字符集:windows字符这里有进行说明。
3. 工程项目属性:调试
-
- 命令:在静态库和动态库中有讲到使用"命令"来实现调试“动态dll”代码,当然,可以用来调试其他相关联的程序。
- 命令参数:主要用来向主函数main()传递参数。在启动被调试的程序时,VS会将此参数作为启动参数传递给被调试的程序。
- 工作目录 :归属于构造参数配置。用于指定被调试程序的工作目录,默认为项目目录$(ProjectDir),可以一般设置为exe所在目录,即$(TargetDir)。程序启动需要读取当前目录下的一些配置文件,如果调试时发现文件明明和应用程序在同一个目录下,程序却提示找不到,通常就是因为工作目录没有设置成应用程序所在目录导致的。
- 附加:归属于构造参数配置。值为否,表示开始调试时,VS执行命令+命令参数启动一个新的进程用于调试;值为是,表示开始调试时,如果由命令配置项指定的应用程序正在运行,则将调试器附加到已存在的进程进行调试。
- 调试器类型:默认为自动,一般不需要修改。
- 环境:归属于构造参数配置。为被调试的程序指定环境变量。
- 合并环境:归属于构造参数配置。用于指定是否将上个配置项 环境配置 与当前VS的运行环境配置合并。
4. 工程项目属性:VC++目录
一般使用"静态库"或"动态库"时,就会用到这两个目录。
5. 工程项目属性:C/C++
下面对一些比较常见的选项进行说明:
-
- C/C++->常规->附加包含目录:归属于输入信息配置。用于添加头文件的包含目录。编译代码时,编译器会到已添加的头文件包含目录下查找头文件,引入相关定义。如果找不到头文件会出现未定义的错误。指定头文件包含目录,可以简化头文件包含语句,只需要直接包含头文件名,即:#include "xxxxx.h",不需要指定头文件目录,编译器会自动查找。
- C/C++->常规->多处理器编译:归属于构造参数配置。值为是,编译器会使用多个处理器内核并行编译,可以加快编译速度,但会增加CPU占用。值为否,编译器不使用多个处理器内核并行编译,编译速度较慢。
- C/C++->优化:归属于构造参数配置。用于指定编译时的优化等级和优化方案。
- C/C++->预处理器:归属于构造参数配置。用于预处理阶段,定义和取消定义宏,从而生成不同的代码。
6. 工程项目属性:链接器
下面对一些常见的选项进行说明:
-
- 链接器->常规->输出文件:归属于输出信息配置。用于指定输出的目标文件路径,一般不做修改。
- 链接器->常规->启用增量链接:归属于构造参数配置。用于指定是否使用增量链接,加速程序链接过程。
- 链接器->常规->附加库目录:归属于输入信息配置。用于指定链接库目录。指定库目录可以简化依赖库的指定方式,即只需要指定依赖库名称即可,不需要指定路径。执行链接步骤时,链接器会到已添加的库目录下根据库名称查找对应的链接库,链接到程序中,最终生成目标文件。
- 链接器->输入->附加依赖项:归属于输入信息配置。用于指定需要链接到目标文件中的依赖库名称。
- 链接器->调试:归属于输出信息配置。用于指定代码优化等级、是否生成 .pdb 调试信息数据库文件以用于调试等。
二. VS2013常见快捷键