VC项目配置基础

一.预处理宏 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"开关。 _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 关于VC编译器预处理宏,参考: 《C/C++ Preprocessor Reference-Predefined Macros》 《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所在路径,GetModulePath()得到的路径。 三.附加头文件包含 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 为编译器指定的包含路径下的头文件:即在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++目录>包含文件”)处人工添加的包含路径和附加包含目录下的头文件的包含 可以使用尖括号进行包含,但一般使用双引号。 原则上,对于工程或文件可见的包含目录下的头文件包含,使用以上两种包含方式中的任一种都不会出错,主要是它们在搜索目录时的顺序不一样。习惯上使 用尖括号包含标准库函数头文件,使用双引号包含用户自定义头文件。 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的可见性)。 五.附加DLL调试 VC6.0中: 如果你需要调试的DLL是动态装入(LoadLibrary)的,则需要在“Project Setting>Debug(Category:Additional DLLs)”处添加这个DLL文件。 六.生成文件目录设置 VC6.0中: 在“Project Setting>Link>Output file name”处填写文件输出路径,相对目录参考*.dsp文件。 VC2005中: 在“项目属性>常规>输出目录”处填写文件输出路径,相对目录参考*.vcproj文件。 输出目录(OutDir)一般为$(SolutionDir)$(ConfigurationName) 输出文件(OutputFile)一般为$(OutDir)/$(ProjectName).exe(*.lib,*.dll) 说明: $(SolutionDir)为*.sln文件所在文件夹; $(ConfigurationName)为*.sln的*.vcproj文件所在文件夹下的debug、releas文件夹,参 考*.vcproj文件中的配置项。 具体在“项目属性>配置属性>调试>命令”下拉点击“编辑”,展开“宏(M)>>”,可以看到很多项目内置宏。 一般的配置为: 输出目录(OutDir):$(ProjectDir)$(PlatformName)/$(ConfigurationName) 中间目录(IntDir):$(OutDir)/Intermediate 输出文件:$(OutDir)/$(ProjectName).lib(dll、exe) 七.依赖项目联编 一个解决方案(dsw、sln)可以创建很多辅助子项目(dsp、vcproj),如何设置使在编译主项目的时,先编译所依赖的辅助项目呢? 一般会配置辅助子项目的OutDir和主项目相同,这样生成的lib或dll对于主项目exe直接可见。 VC6.0中: 选择菜单“Project>Dependencies”可以选择需要联编的项目。 VC2005中: 在解决方案资源管理器中右击项目名称,选择“引用”或“项目依赖项”菜单,可选择项目依赖项,并可以设置依赖顺序。 八.关于相对目录 相对目录是相对某个文件而言的,例如在VC项目属性配置附加包含目录、附加库目录则是相对*.dsp、*.vcproj文件而言的;在某 个*.c、*.cpp文件中使用#include包含命令,是相对这个*.c、*.cpp文件而言的。 当前目录是可见的,一般直接引用文件名(夹),对于子文件夹可以添加”./”。 ..:父目录 ../include:父目录下的include目录 ../..:祖父目录 ../../include:祖父目录下的include目录 参考: 《Managing Solutions, Projects, and Files》 《File Types Created for Visual C++ Projects》 《VC 2005 解决方案的目录结构设置和管理》 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/phunxm/archive/2009/12/26/5082488.aspx

你可能感兴趣的:(VC项目配置基础)