VS中引用目录、包含目录和库目录的区别和联系

目录

    • VS中引用目录、包含目录和库目录的区别和联系
    • 例子说明

VS中引用目录、包含目录和库目录的区别和联系

目录类型 包含文件方式 编译依赖性 文件类型 典型用途
引用目录 #include " " 直接依赖,修改需要重新编译 头文件(.h) 自己开发频繁变化的头文件
包含目录 #include < > 间接依赖,修改只需重链接不需重新编译 头文件(.h) Third Party相对稳定的头文件
库目录 - 间接依赖,修改只需重新链接不需重新编译 库文件(.lib .dll) 封装公用函数库的库文件

可以看出:

  1. 引用目录直接被编译器搜索和编译,对修改高度敏感,包含目录和库目录较为稳定。
  2. 引用目录使用**#include " "方式包含, 包含目录使用#include < >**方式包含。
  3. 修改引用目录需要重新编译,包含目录和库目录只需重新链接。
  4. 引用目录适用于开发者自己频繁变动的头文件,包含目录和库目录适用于第三方相对固定的头文件和库。
  5. 库目录存储真正的库文件(.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  // 包含目录

int main() {
    func1();  // 来自header1.h
    func2();  // 来自myheader.h 
    liba_func(); // 来自liba.h
}

编译过程:

  1. 编译器首先搜索引用目录ref,直接包含header1.h。
  2. 编译器搜索包含目录include,发现myheader.h,包含进来。
  3. 编译器继续搜索include目录,找到第三方目录thirdparty,并包含liba.h。
  4. 链接过程会链接库目录lib中的liba.lib库。
  5. 修改ref目录的header1.h需要重新编译,修改include目录只需重链接,修改lib目录也只需重链接。
    总结:
  6. 引用目录直接包含自己频繁变化的头文件,包含目录包含thirdparty稳定的头文件。
  7. 修改引用目录需要重新编译,包含目录和库目录只需重链接。
  8. 库目录包含实际的库文件,供链接使用。
  9. 三者directories工作联系,实现程序的构建。
    理解三者的这个示例,可以加深对各自作用和区别的理解。恰当使用可以构建高效可重用的项目,这是C/C++开发者必备的技能之一。

你可能感兴趣的:(c++)