关于相对目录
相对目录是相对某个文件而言的,例如在 VC 项目属性配置附加包含目录、附加库目录则是相对 *.dsp 、 *.vcproj 文件而言的;在某个 *.c 、 *.cpp 文件中使用 #include 包含命令,是相对这个 *.c 、*.cpp 文件而言的。
当前目录是可见的,一般直接引用文件名(夹)
对于子文件夹可以添加“./” 。
.. :父目录
../include :父目录下的 include 目录
../.. :祖父目录
http://www.cnblogs.com/include :祖父目录下的 include 目录
-----------------------------------------------------
C/C++附加包含目录和VC++目录包含目录区别?
连接器常规附加库目录和VC++目录库目录区别?
连接器-输入-附加依赖项
附加依赖项 是指输入项,如某个.LIB文件a.lib,添加到附加依赖项,你的LIB文件被真正包含进来了。等同于“#pragma comment(lib, "winsock.lib") ”语句
附加库目录 是你用 #pragma comment(lib,"a.lib")的时候;此时就搜索a.lib的路径列表就包含这个路径。
把它所在的目录添加到附加库目录里面 :仅仅包含目录只是告诉IDE,搜索没有指定路径的库文件时,也搜索这里。
------------------------------------------------------------------------------------------------------------------------------------
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" 开关。
当项目中的文件具有 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() 得到。
包含目录:#include 中headerfile.h的搜索目录。
如果有XXX.h找不到,设置这个目录可以解决。
附加依赖项:C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码。
所以,要使用一个库,除了要include他的头文件以外,还要在链接过程中把lib加进去。这个就是在附加链接库中设置。
其实,一般的库会用#pragma comment(lib,"xxx.lib") 来设置
这个过程出错会出现link error,大概是“未定义的函数XXX”。
库目录:就是寻找.lib文件的目录。
如果设置错误,会link error,提示"找不到XXX.lib"。
在VS工程中,添加c/c++工程中外部头文件及库的基本步骤:
1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。
2、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。
然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名。
3、添加工程引用的dll动态库:把引用的dll放到工程的可执行文件所在的目录下。
三.附加头文件包含
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++ 目录 à 包含文件 ” )),一般使用尖括号进行包含声明,当然使用双引号包含也没有错。
对于在 “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 文件。
目录路径不需添加双引号,路径分隔符为 ’/’ 或