VC项目配置基础 (VC6.0 和VC2005)

摘要:
VC6.0中的“ProjectSettingàC/C++àProjectOptions”处将有/D“_MBCS”或/D“_UNICODE”开关。对于VC编译器预处理宏,请参阅:预定义宏,C/C++预处理器引用预定义宏,C++II中定义的WIN32和_WIN32之间有什么区别。exe程序的工作目录和控制台程序运行参数VC6.0:“ProjectSettingàDebugàWorkingdirectory”。相应的“/I”包含命令将出现在“项目属性à配置属性àC/C++à命令行”中。#include:#incluse 为编译器指定的包含路径下的头文件:即VC6.0中“ToolsàOptionsàDirectoriesàIncludefiles”中指定的包含目录。

一.预处理宏

1. 通用宏

VC6.0中:

Project Settingà C/C++à Preprocessor definitions

VC2005

项目属性à 配置属性à C/C++à 预处理器定义

WIN32:指明是Window 32位系统的编译器,一般用作平台识别。

_MBCS/_UNICODE:指明该工程使用的字符集(多字节字符集/UNICODE)。

VC6.0“Project Settingà C/C++à Project Options”处将会有/D "_MBCS"/D "_UNICODE"开关。

VC2005项目属性à 配置属性à 常规à 项目默认值à 字符集中选择使用多字节字符集使用Unicode 字符集;在项目属性à 配置属性à C/C++à 使用UNICODE响应文件中选择。在项目属性à 配置属性à C/C++à 命令行处将会有/D "_MBCS"/D "_UNICODE" /D "UNICODE"开关。

当项目中的文件具有UNICODE 路径(例如中文路径)时,应在项目属性à C/C++à 常规项目属性à 链接器à 常规中开启使用UNICODE 响应文件开关。

_CONSOLE/_WINDOWS:指明应用程序的类型(控制台程序/Windows窗口应用程序)。

_DEBUG/NDEBUG:指明编译版本(Debug/Release)。

除此之外,VC不同的项目类型,有一些特定的宏,以在编译器区分项目类型。

2.特定宏

1Win32 Static Library项目

VC6.0中:

Project Settingà C/C++CategoryGeneralà Preprocessor definitions_LIB

如果选择了MFC Support_WINDOWS,_AFXDLL

VC2005

项目属性à 常规à 配置类型à 静态库(.lib)

项目属性à C/C++à 预处理器à 预处理器定义:_LIB

2Win32 Dynamic-Link Library项目

VC6.0中:

Project Settingà C/C++à Preprocessor definitions_WINDOWS,_USRDLL,DLL_EXPORTS

VC2005

项目属性à 常规à 配置类型à 动态库(.dll)

项目属性à C/C++à 预处理器à 预处理器定义:_WINDOWS;_USRDLL;DLL_EXPORTS

3MFC DLL项目

<1>Regular DLL with MFC statically linked(带静态链接MFC的规则DLL

VC6.0中:

Project Settingà C/C++à Preprocessor definitions_WINDOWS,_WINDLL,_USRDLL

VC2005

项目属性à C/C++à 预处理器à 预处理器定义:_WINDOWS;_USRDLL

<2>Regular DLL using shared MFC DLL(使用共享MFC DLL的规则DLL

VC6.0中:

Project Settingà C/C++à Preprocessor definitions_WINDOWS,_WINDLL,_AFXDLL , _USRDLL

VC2005

项目属性à C/C++à 预处理器à 预处理器定义:_WINDOWS;_USRDLL

<3>MFC Extension DLLusing shared MFC DLL)(MFC扩展DLL

VC6.0中:

Project Settingà C/C++à Preprocessor definitions_WINDOWS,_WINDLL,_AFXDLL ,_USRDLL

VC2005

项目属性à C/C++à 预处理器à 预处理器定义:_WINDOWS; _AFXEXT

DLL项目中,_USRDLL宏表示生成Export Lib

关于VC编译器预处理宏,参考:

Predefined MacrosVC6.0

C/C++ Preprocessor Reference-Predefined MacrosVC8.0)》

What’s the difference between the WIN32 and _WIN32 defines in C++

二.工作目录和控制台程序运行参数

VC6.0中:

“Project Settingà Debugà Working directory”处填写exe程序的工作目录。

“Project Settingà Debugà Program argument”处填写main运行参数。

VC2005

项目属性à 配置属性à 调试à 工作目录处填写exe程序的工作目录。

项目属性à 配置属性à 调试à 命令参数处填写main运行参数。

默认的工作目录为ProjectDir,即*.dsw/*.vcproj所在目录。

通过编译器启动(Ctrl + F5)应用程序时,可以将所依赖的libdll库文件所在目录设为工作目录。应用程序执行期间,创建、保存文件将在工作目录中。

工作目录是指当前目录,GetCurrentDirectory()得到的路径;SetCurrentDirectory来改变。

运行目录是指exe所在路径,可通过GetModuleFileName()得到。

三.附加头文件包含

VC6.0中:

VC6.0默认include包含路径:Toolsà Optionsà Directoriesà Include files

对于特定项目的头文件包含,在“Project Settingà C/C++ CategoryPreprocessorà Additional include directories”处添加附加头文件目录,相对目录参考*.dsp文件。

目录路径不需添加双引号,路径分隔符为’/’’/’,不必考虑反斜杠’/’的转义。多个路径之间以逗号 分隔。

相应的在“Project Settingà C/C++à Project Options”中将会出现“/I”的包含命令。

VC2005

VC2005默认include包含路径:工具à 选项à 项目和解决方案à VC++目录à 包含文件。

对于特定项目的头文件包含,在项目属性à 配置属性à C/C++à 常规à 附加包含目录处添加附加包含目录,相对目录参考*.vcproj文件。

目录路径不需添加双引号,路径分隔符为’/’’/’,不必考虑反斜杠’/’的转义。多个路径之间以分号 分隔。

相应的在项目属性à 配置属性à C/C++à 命令行中将会出现/I的包含命令。

关于#include的两种包含方式

#include<std*.h>为编译器指定的包含路径下的头文件:即在VC6.0中的“Toolsà Optionsà Directoriesà Include files”(对应VC2005工具à 选项à 项目和解决方案à VC++目录à 包含文件)处指定的包含目录。默认情况下包括

1$(VCInstallDir)include/Microsoft Visual Studio/VC98/INCLUDE

2$(VCInstallDir)atlmfc/include/Microsoft Visual Studio/VC98/ATL/INCLUDE/Microsoft Visual Studio/VC98/MFC/INCLUDE

3$(VCInstallDir)PlatformSDK/includeVC2005)。

用户也可以自己添加包含路径到此。

对于“Toolsà Optionsà Directoriesà Include files”工具à 选项à 项目和解决方案à VC++目录à 包含文件)目录下的文件的包含,一般可使用尖括号包含。系统对尖括号的包含优先到编译器设置的包含路径下定位,再到附加包含目录下进行定位。

#include"MyHeader.h"为在“Toolsà Optionsà Directoriesà Include files”工具à 选项à 项目和解决方案à VC++目录à 包含文件)处人工添加的包含路径下的头文件或者附加包含目录下的头文件。

对于编译器提供的标准库函数头文件(“Toolsà Optionsà Directoriesà Include files”工具à 选项à 项目和解决方案à VC++目录à 包含文件)),一般使用尖括号进行包含声明,当然使用双引号包含也没有错。

对于在“Toolsà Optionsà Directoriesà Include files”工具à 选项à 项目和解决方案à VC++目录à 包含文件)处人工添加的包含路径和附加包含目录下的头文件的包含可以使用尖括号进行包含,但一般使用双引号。

原则上,对于工程或文件可见的包含目录下的头文件包含,使用以上两种包含方式中的任一种都不会出错,主要是它们在搜索目录时的顺序不一样。习惯上使用尖括号包含标准库函数头文件,使用双引号包含用户自定义头文件。建议除标准SDK(如DirectX等),一般针对具体工程使用附加头文件包含即可,尽量不要去动编译器的“Toolsà Optionsà Directoriesà Include files”(对应VC2005工具à 选项à 项目和解决方案à VC++目录à 包含文件)作编译器级全局配置。下面的链接库包含处理同此。

External Dependencies里面显示的是你的工程要用到的头文件,不在你的工程里面,而且也不在VC的默认包含路径中。参考:《VC6.0External Dependencies》。

四.附加链接库包含

VC6.0中:

VC6.0默认lib包含路径:Toolsà Optionsà Directoriesà Library files

对于特定项目的头文件包含,可以通过以下两步添加附加链接库:

1. “Project Setting à LinkCategoryInputà Additional library path”处添加附加库目录,相对目录参考*.dsp文件。

目录路径不需添加双引号,路径分隔符为’/’’/’,不必考虑反斜杠’/’的转义。多个路径之间以逗号 分隔。

相应的将会在“Project Setting à Linkà Project Options”处同步/libpath库包含命令。

2. “Project Setting à Link CategoryGeneralà Object/Library Modules” 处添加库文件名YourLib.lib也可在文件中使用#pragma comment(lib, "YourLib.lib")显式导入所依赖的静态库),多个库之间以空格 分隔。

相应的将会在“Project Setting à Linkà Project Options”处同步包含的库名称。

VC2005

VC2005默认lib包含路径:工具à 选项à 项目和解决方案à VC++目录à 库文件

对于特定项目的库文件包含,可以通过以下两种方式添加附加库目录:

1.

1)在项目属性à 配置属性à 链接器à 常规à 附加库目录处输入附加库目录路径,相对目录参考*.vcproj文件。

目录路径不需添加双引号,路径分隔符为’/’’/’,不必考虑反斜杠’/’的转义。多个路径之间以分号 分隔。

相应的将会在项目属性à 配置属性à 链接器à 命令行处同步“/LIBPATH”库包含命令。

2)在项目属性à 配置属性à 链接器à 输入à 附加依赖项处添加库文件名YourLib.lib也可在文件中使用#pragma comment(lib, "YourLib.lib")显式导入所依赖的静态库),多个库之间以空格 分隔。

相应的将会在项目属性à 配置属性à 链接器à 命令行处同步包含的库名称。

2.

项目属性à 配置属性à 链接器à 命令行处添加库文件名YourLib.lib必要时添加相对目录,保证YourLib的可见性)。

五.生成文件目录设置

VC6.0中:

“Project Settingà Generalà Output directories”“Output files”处填写*.exe*.lib/*.dll的生成目录,相应在“Project Settingà Link(或Libraryà Output file name”处将会同步文件输出路径。相对目录参考*.dsp文件。

“Project Settingà Generalà Output directories”“Intermediate files”处填写中间文件生成目录。相对目录参考*.dsp文件。

VC2005

项目属性à 常规à 输出目录处填写输出目录,在项目属性à 常规à 中间目录处填写中间目录,相对目录参考*.vcproj文件。

项目属性à 链接器(或管理员)à 常规à 输出文件处填写输出文件路径。

输出目录(OutDir)一般为$(SolutionDir)$(ConfigurationName)

输出文件(OutputFile)一般为$(OutDir)/$(ProjectName).exe*.lib*.dll

说明

$(SolutionDir)*.sln文件所在文件夹,尾带‘/’

$(ProjectDir)*.vcproj文件所在文件夹,尾带‘/’

$(ConfigurationName)*.sln*.vcproj文件所在文件夹下的debugrelease文件夹,参考*.vcproj文件中的<Configurations>配置项。

具体在项目属性à 配置属性à 调试à 命令下拉点击编辑,展开(M )>>”,可以看到很多项目内置宏。

一般的配置为:

输出目录OutDir):$(ProjectDir)$(PlatformName)/$(ConfigurationName)

中间目录IntDir):$(OutDir)/Intermediate

输出文件$(OutDir)/$(ProjectName).lib(dllexe)

六.关于相对目录

相对目录是相对某个文件而言的,例如在VC项目属性配置附加包含目录、附加库目录则是相对*.dsp*.vcproj文件而言的;在某个*.c*.cpp文件中使用#include包含命令,是相对这个*.c*.cpp文件而言的。

当前目录是可见的,一般直接引用文件名(夹),对于子文件夹可以添加”./”

..:父目录

../include:父目录下的include目录

../..:祖父目录

http://www.cnblogs.com/include:祖父目录下的include目录

七.依赖项目联编

一个解决方案(dswsln)可以创建很多辅助子项目(dspvcproj),如何设置使在编译主项目的时,先编译所依赖的辅助项目呢?

一般会配置辅助子项目的OutDir和主项目相同,这样生成的libdll对于主项目exe直接可见。

VC6.0中:

选择菜单“Projectà Dependencies”可以选择需要联编的项目。

VC2005

在解决方案资源管理器中右击项目名称,选择引用项目依赖项菜单,可选择项目依赖项,并可以设置依赖顺序。

八.附加DLL 调试

VC6.0中:

如果你需要调试的DLL是动态装入(LoadLibrary)的,则需要在“Project Setting à DebugCategoryAdditional DLLs处添加这个DLL文件。

九.导出makefile

VC6.0中选择菜单“Projectà Export Makefile”即可导出Makefile文件*.mak

VC6以后不再支持makefile输出了。

参考:《VCMAKE文件语法 》,《vs6 IDE导出的 makefile使》,《教你在 VS2005MakeFile

十.代码的编辑与阅读导航

Visual Studio本身就带有充分的代码组织、编辑、分析以及阅读能力的支持。

VC6.0VC2005中的“Edit à Find in Files”支持指定项目、工程或文件内的关键字搜索。

VC6.0“Tools à Source Browser”,提供对“Definitions and References”“File Outline”“Base Classes and Members”“Derived Classes and Members”“Call Graph”“Callers Graph”等导航功能支持。

VC2005右键快捷菜单中支持查找所有引用;右键快捷菜单中的调用浏览器支持函数调用关系图和被调用关系图的查看。类视图设置中支持显示基类型派生类型继承成员等功能。

此外,在阅读代码时,我们可以使用书签(Bookmark)来设置锚点,这样就可以实现基于书签的自定义索引导航。

下面介绍常用的编程辅助插件软件及源代码层次结构分析工具软件。

1.Visual Assist X是一款非常好的Microsoft Visual Studio辅助插件,支持C/C++,C#,ASPVisual BasicJavaHTML等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等,有助于提高开发过程的自动化和开发效率。

2Windows下的Source Insight是一个面向项目开发的程序编辑器和代码导航浏览器,它还能显示reference treesclass inheritancediagramscall trees。相应的Linux下阅读源代码的利器Source Navigator能很好地解决文件定位和跳转问题。

3Rational Rose是利用UML(统一建模语言)进行分析和设计面向对象软件系统的强大的可视化工具,可以进行项目需求分析、结构规划和生成框架代码,还可以支持从现有系统逆向转出工程代码,生成Rose模型的功能。

逆向工程(Reverse Engineer)就是从现有系统的代码来生成模型的功能。通过Rational Rose分析已有的代码,可了解代码结构和数据结构,生成类层次关系图、数据模型图和组件图。

十一. VC6 常用快捷键

Alt+F7Project Settings

Ctrl+J/K:寻找上一个/下一个预编译条件

Ctrl+Shift+J/K:寻找上一个/下一个预编译条件并将这一块选定

Ctrl+Tab:当前打开文档和上一次打开文档切换。

Alt+O:头文件与cpp文件的交互显示

F12Goto definition

Shift+F12Goto reference

Ctrl+Home文档头

Ctrl+Shift+Home选定从当前位置到文档头

Ctrl+End文档尾

Ctrl+Shift+End选定从当前位置到文档尾

Alt+F8:自动格式重排

Ctrl+F4:关闭当前文档

Ctrl+Z/Alt+BackspaceUndo

Ctrl+Shift+Z/Ctrl+YRedo

Ctrl+B/Alt+F9编辑断点

Ctrl+Shift+F9去掉所有断点

Ctrl+D定位工具条查找输入栏

Alt+F3/Ctrl+F:当前文档查找

Ctrl+F3查找下一个

Ctrl+Shift+F3查找上一个

Ctrl+H:替换

Ctrl+]:括号匹配

Ctrl+向上滚屏

Ctrl+向下滚屏

Ctrl+移到前一个单词

Ctrl+移到后一个单词

Ctrl+Shift+选定当前位置到前一个单词

Ctrl+Shift+选定当前位置到后一个单词

Ctrl+Backspace删除当前单词的前半截(以光标为分割)

Ctrl+Del删除当前单词的后半截(以光标为分割)

Ctrl+L:剪切当前行

Ctrl+Shift+L:删除当前

F2:上一个书签

Shift+F2:上一个书签

Alt+F2:编辑书签

CtrlF2:添加/删除一个书签

Ctrl+Shift+F2清除所有书签

参考:

VC的环境设置

VC6.0工程设置介绍

Visual C++ 6.0环境配置

VC 2005 解决方案的目录结构设置和管理

Managing Solutions, Projects, and Files

File Types Created for Visual C++ Projects

免责声明:文章转载自《VC项目配置基础 (VC6.0 和VC2005)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jsTree通过AJAX从后台获取数据用PowerDesigner15自动将数据库里的表生成ER图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入浅出Visual C++动态链接库(Dll)编程

文章作者:宋宝华信息来源:天极网原始连接: http://soft.yesky.com/lesson/318/2166818.shtml?412  动态链接库(DLL)是Windows系统的核心,也是COM技术的基础,因此突破动态链接库一直是技术人员的攻坚目标,本期专题将由浅入深的介绍动态链接库的基础慨念、分类、实现和应用。基础慨念1.概论 先来阐述一...

用Apache htpasswd管理SVN帐户

在apache安装目录下找到bin目录,该目录下有htpasswd执行文件htpasswd -cmb userfile abc 123456c :createm:md5b :在命令行上输入密码解释:创建userfile文件,增加用户名为abc的用户,密码为md5加密的123456 更新密码htpasswd userfile abc 添加新用户htpassw...

JavaWeb 之文件上传

1. 文件上传的要求 1.1 上传对表单的限制 method="post"; enctype="multipart/form-data"; 表单中需要添加文件表单项: <input type="file" name="xxx"/>. 1.2 上传对 Servlet 的限制 request.getParameter("xxx") 方法...

Linux文件系统应用---系统数据备份和迁移(用户角度)

1前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决。 之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕"基于用户角度的Linux下的数据备份和迁移"的场景,对Linux文件系统相关知识进行实地...

Linux常用命令汇总

1. 查看Linux操作系统信息: uname -a cat /proc/version lsb_release -a    2. 设置ls显示的文件夹的颜色(将下面这条目录加在 .bashrc 文件最后): LS_COLORS=$LS_COLORS:'di=0;35:' ; export LS_COLORS (All possibl...

实验一GIT代码版本管理

实验一  GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理; 2)   熟练掌握git的基本指令和分支管理指令; 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3)掌握git log ,git add ,git diff 指令 4) 掌握git tag git branch,git...