C++如何引用上级目录中的.h头文件?
解决C++上级目录头文件引用问题
一、代码层的相对路径引用
在read.cpp和code.cpp中,直接使用相对路径引用上级目录的lib.h即可:
#include "../lib.h"
../代表当前文件所在目录的上级目录,编译器能通过这个定位到root-dir下的lib.h。
⚠️ 注意:绝对不要直接#include "lib.cpp",这会导致函数重复定义的编译错误,正确做法是只包含头文件lib.h,编译时把lib.cpp加入编译列表。
二、编译时指定头文件搜索路径
如果不想在代码里写相对路径,可以通过编译器参数指定头文件的根搜索目录:
GCC/Clang编译器
编译时添加-I参数指定root-dir路径:
# 若当前工作目录是root-dir的上级目录 g++ dir-a/read.cpp dir-b/code.cpp lib.cpp -I ./root-dir -o output # 若当前工作目录就是root-dir,直接编译即可 g++ dir-a/read.cpp dir-b/code.cpp lib.cpp -o output
MSVC编译器
使用/I参数指定根路径:
# 若当前工作目录是root-dir的上级目录 cl.exe dir-a\read.cpp dir-b\code.cpp lib.cpp /I .\root-dir /Fe:output.exe
三、常见错误说明
fatal error: lib.h: No such file or directory:编译器未找到头文件路径,要么用相对路径../lib.h,要么编译时指定搜索目录。#include "root-dir/lib.h"无效:除非root-dir被添加到编译器的默认搜索路径,否则编译器无法识别该路径。- 绝对路径不推荐:硬编码绝对路径会让项目失去可移植性,换环境后编译必然失败。
内容的提问来源于stack exchange,提问作者Kira Egen
相关产品推荐
相关产品推荐

