您的位置:首页 > 其它

VC项目配置基础

2010-08-20 16:26 417 查看
摘自 范晓特ID:phunxm

 

一.预处理宏


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.

特定宏




1



Win32 Static Library

项目


VC6.0

中:


Project Setting
à

C/C++

Category

General

à

Preprocessor definitions

_LIB

如果选择了
MFC Support

_WINDOWS,_AFXDLL

VC2005

中:



项目属性
à

常规
à

配置类型
à

静态库
(.lib)

项目属性
à

C/C++
à

预处理器
à

预处理器定义:
_LIB



2



Win32 Dynamic-Link Library

项目


VC6.0

中:


Project Setting
à

C/C++
à

Preprocessor definitions

_WINDOWS,_USRDLL,DLL_EXPORTS

VC2005

中:



项目属性
à

常规
à

配置类型
à

动态库
(.dll)

项目属性
à

C/C++
à

预处理器
à

预处理器定义:
_WINDOWS;_USRDLL;DLL_EXPORTS



3



MFC 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 DLL



using 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 Macros


VC6.0




C/C++ Preprocessor Reference-Predefined Macros


VC8.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
)应用程序时,可以将所依赖的
lib

dll
库文件所在目录设为工作目录。应用程序执行期间,创建、保存文件将在工作目录中。

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

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

 

三.附加头文件包含


VC6.0

中:


VC6.0
默认
include
包含路径:
Tools
à

Options
à

Directories
à

Include files


对于特定项目的头文件包含,在
“Project Setting
à

C/C++

Category

Preprocessor

à

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/include

VC2005
)。

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

对于
“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.0的

External Dependencies

》。

 

四.附加链接库包含


VC6.0

中:


VC6.0
默认
lib
包含路径:
Tools
à

Options
à

Directories
à

Library files

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

1.

“Project Setting
à

Link

Category

Input

à

Additional library path”
处添加附加库目录,相对目录参考
*.dsp
文件。

目录路径不需添加双引号,路径分隔符为
’/’

’/’
,不必考虑反斜杠
’/’
的转义。多个路径之间以逗号
分隔。

相应的将会在
“Project Setting
à

Link
à

Project Options”
处同步
/libpath

库包含命令。

2.

“Project Setting
à

Link

Category

General

à

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
文件所在文件夹下的
debug

release
文件夹,参考
*.vcproj
文件中的
<Configurations>
配置项。

具体在

项目属性
à

配置属性
à

调试
à

命令

下拉点击

编辑

,展开


(M
)>>”
,可以看到很多项目内置宏。

一般的配置为:

输出目录


OutDir
):
$(ProjectDir)$(PlatformName)/$(ConfigurationName)

中间目录


IntDir
):
$(OutDir)/Intermediate

输出文件


$(OutDir)/$(ProjectName).lib(dll

exe)

 



六.关于相对目录


相对目录是相对某个文件而言的,例如在
VC
项目属性配置附加包含目录、附加库目录则是相对
*.dsp

*.vcproj
文件而言的;在某个
*.c

*.cpp
文件中使用
#include
包含命令,是相对这个
*.c

*.cpp
文件而言的。

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


..
:父目录

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

../..
:祖父目录

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

 



七.依赖项目联编


一个解决方案
(dsw

sln)
可以创建很多辅助子项目
(dsp

vcproj)
,如何设置使在编译主项目的时,先编译所依赖的辅助项目呢?

一般会配置辅助子项目的
OutDir
和主项目相同,这样生成的
lib

dll
对于主项目
exe
直接可见。

VC6.0

中:


选择菜单
“Project
à

Dependencies”
可以选择需要联编的项目。

VC2005

中:



在解决方案资源管理器中右击项目名称,选择

引用



项目依赖项

菜单,可选择项目依赖项,并可以设置依赖顺序。

 


八.附加DLL
调试


VC6.0

中:


如果你需要调试的
DLL
是动态装入(
LoadLibrary
)的,则需要在
“Project Setting
à

Debug

Category

Additional DLLs


处添加这个
DLL
文件。

 

九.导出makefile



VC6.0
中选择菜单
“Project
à

Export Makefile”
即可导出
Makefile
文件
*.mak


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

参考:《
VC的

MAKE文件的语法

》,《
vs6 IDE导出的

makefile使用方法

》,《
教你在

VS2005下写

MakeFile



 

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


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

VC6.0

VC2005
中的
“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
#,
ASP

Visual Basic

Java

HTML
等语言,能自动识别各种关键字、系统函数、成员变量、自动给出输入提示、自动更正大小写错误、自动标示错误等,有助于提高开发过程的自动化和开发效率。

2

Windows
下的
Source Insight

是一个面向项目开发的程序编辑器和代码导航浏览器,
它还能显示
reference trees

class inheritancediagrams

call trees
。相应的
Linux
下阅读源代码的利器
Source Navigator

能很好地解决文件定位和跳转问题。

3

Rational Rose

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

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

 

十一. VC6
常用快捷键


Alt+F7

Project Settings

 

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

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

 

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

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

 

F12

Goto definition

Shift+F12

Goto reference

 

Ctrl+Home

文档头

Ctrl+Shift+Home

选定从当前位置到文档头

Ctrl+End

文档尾

Ctrl+Shift+End

选定从当前位置到文档尾

Alt+F8
:自动格式重排

Ctrl+F4
:关闭当前文档

 

Ctrl+Z/Alt+Backspace

Undo

Ctrl+Shift+Z/Ctrl+Y

Redo

 

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
:编辑书签

Ctrl

F2
:添加
/
删除一个书签

Ctrl+Shift+F2

清除所有书签

 

参考:



VC的环境设置




VC6.0工程设置介绍




Visual C++ 6.0环境配置




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




Managing Solutions, Projects, and Files




File Types Created for Visual C++ Projects

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息