C++怎么引入头文件 C++头文件包含路径设置【提醒】

6次阅读

头文件找不到的主因是#include写法错误:自定义头文件应用#include “xxx.h”,标准库用#include ;编译器搜索路径不同,双引号先查当前目录,尖括号跳过当前目录直查系统路径。

C++怎么引入头文件 C++头文件包含路径设置【提醒】

头文件找不到?先看 #include 写法对不对

绝大多数“找不到头文件”的问题,其实出在 #include 语法本身。c++ 区分两种写法:#include "xxx.h"#include <xxx.h></xxx.h>,它们的搜索路径顺序完全不同。

用双引号时,编译器**先查当前源文件所在目录**,再查系统路径;用尖括号时,**直接跳过当前目录,只查系统/配置的包含路径**。如果你自己写的 utils.h 放在和 main.cpp 同级,却写了 #include <utils.h></utils.h>,那就必然报错 fatal Error: utils.h: No such file or Directory

  • 自己项目里的头文件,统一用 #include "xxx.h"
  • 标准库或第三方库(如 <vector></vector><boost></boost>),用 #include <xxx></xxx>
  • 不要混用:比如 #include "vector" 在某些编译器下可能“碰巧”通过,但不跨平台,也不符合约定

g++ / clang 怎么加自定义头文件路径

当头文件不在当前目录,又不想用相对路径硬写进 #include(比如 #include "../../inc/common.h"),就得靠编译器参数告诉它去哪找。

关键参数是 -I(大写的 i),后面跟路径。它会让编译器把该路径加入 #include <...></...>#include "..." 的搜索队列前端。

立即学习C++免费学习笔记(深入)”;

  • 多个路径就写多个 -I,顺序重要:前面的路径优先级更高
  • 路径可以是绝对路径(-I/home/user/project/include)或相对路径(-I../include
  • 注意:windows 下 MinGW 或 MSVC 不认 -I,MSVC 要用 /I,Clang on Windows 两者都支持,但建议统一用 -I 避免混淆
  • 示例命令:g++ -I./include -I/usr/local/include/mylib main.cpp

CMake 里怎么正确设置 include_directories

用 CMake 管理项目时,别在每个 add_executable 前手动塞 include_directories(...) —— 它作用域是全局的,容易污染其他 target,而且从 CMake 3.10+ 就被标记为 legacy。

真正推荐的方式是用 target_include_directories,按 target 精确控制头文件可见范围。

  • 只让某个可执行文件看到头文件:target_include_directories(myapp private ./inc)
  • 让库的使用者也能用它的头文件(比如安装后别人 #include <mylib></mylib>):target_include_directories(mylib Interface $<include>)</include>
  • PRIVATE 表示只编译本 target 时生效;public 表示本 target 及其依赖者都能用;INTERFACE 表示只给依赖者用
  • 别漏掉 $<...></...>

text=ZqhQzanResources