VS中引用目录、包含目录和库目录的区别和联系
目录类型 | 包含文件方式 | 编译依赖性 | 文件类型 | 典型用途 |
---|---|---|---|---|
引用目录 | #include " " | 直接依赖,修改需要重新编译 | 头文件(.h) | 自己开发频繁变化的头文件 |
包含目录 | #include < > | 间接依赖,修改只需重链接不需重新编译 | 头文件(.h) | Third Party相对稳定的头文件 |
库目录 | - | 间接依赖,修改只需重新链接不需重新编译 | 库文件(.lib .dll) | 封装公用函数库的库文件 |
可以看出:
- 引用目录直接被编译器搜索和编译,对修改高度敏感,包含目录和库目录较为稳定。
- 引用目录使用
#include " "
方式包含, 包含目录使用#include < >
方式包含。 - 修改引用目录需要重新编译,包含目录和库目录只需重新链接。
- 引用目录适用于开发者自己频繁变动的头文件,包含目录和库目录适用于第三方相对固定的头文件和库。
- 库目录存储真正的库文件(.lib, .dll等),包含目录和引用目录只存储头文件。
综上,理解这三种目录的区别对代码组织和提高编译效率是很有帮助的。恰当使用可以达到减少不必要重新编译和提高代码重用的目的。
例子说明
这里用一个示例项目来说明引用目录、包含目录和库目录的区别和联系。
项目结构:
|- include/ // 包含目录
|- thirdparty/ // 第三方头文件
|- liba.h
|- libb.h
|- myheader.h
|- ref/ // 引用目录
|- header1.h
|- header2.h
|- src/
|- main.cpp
|- lib/ // 库目录
|- liba.lib
|- libb.lib
main.cpp内容:
#include "ref/header1.h" // 引用目录
#include <include/myheader.h> // 包含目录
#include <include/thirdparty/liba.h> // 包含目录
int main() {
func1(); // 来自header1.h
func2(); // 来自myheader.h
liba_func(); // 来自liba.h
}
编译过程:
- 编译器首先搜索引用目录ref,直接包含header1.h。
- 编译器搜索包含目录include,发现myheader.h,包含进来。
- 编译器继续搜索include目录,找到第三方目录thirdparty,并包含liba.h。
- 链接过程会链接库目录lib中的liba.lib库。
- 修改ref目录的header1.h需要重新编译,修改include目录只需重链接,修改lib目录也只需重链接。
总结: - 引用目录直接包含自己频繁变化的头文件,包含目录包含thirdparty稳定的头文件。
- 修改引用目录需要重新编译,包含目录和库目录只需重链接。
- 库目录包含实际的库文件,供链接使用。
- 三者directories工作联系,实现程序的构建。
理解三者的这个示例,可以加深对各自作用和区别的理解。恰当使用可以构建高效可重用的项目,这是C/C++开发者必备的技能之一。