g++指定的-I头文件包含路径被忽略该如何解决?
问题排查与解决方案
核心原因
g++并没有忽略-I参数,报错是路径匹配错误导致的,结合你的目录结构,常见的错误场景有两种:
- 你在项目根目录执行编译命令:此时
$(pwd)指向项目根目录,-I$(pwd)/include会去根目录下找include文件夹,但你的头文件实际存放在src/include路径下,路径不匹配自然找不到头文件;同时根目录下执行*.c也匹配不到存放在src目录里的C文件。 - 你在src目录执行编译命令但存在其他错误:如果已经进入src目录执行命令,
-I$(pwd)/include路径是正确的,此时报错大概率是setup.h实际未存放在include目录下,或是头文件名、目录名存在拼写/大小写错误。
修复方案
根据你执行命令的位置选择对应方案即可,同时建议添加-x c++参数强制将C文件作为C代码编译,避免不同版本g的后缀识别差异:
- 进入src目录执行编译(推荐)
cd src g++ -x c++ -I./include *.c -o ../build/foo - 在项目根目录执行编译
直接调整路径参数即可:g++ -x c++ -Isrc/include src/*.c -o build/foo
内容的提问来源于stack exchange,提问作者Homunculus Reticulli
相关产品推荐
相关产品推荐

