如何分析C++头文件依赖并解决gcc -H输出包含系统库依赖的问题
解决方案
gcc/g++ 的 -H 参数输出默认不区分项目自定义头和系统头,且输出内容会打印到标准错误流而非标准输出,你可以通过管道加grep过滤系统头路径的方式实现需求,具体操作如下:
常用过滤命令(Linux 环境)
g++ -MM a.cc -H 2>&1 | grep -v '^[.]* /usr/'
命令说明
2>&1:将-H输出的标准错误流重定向到标准输出,才能通过管道传递给grep处理grep -v '^[.]* /usr/':反向匹配过滤所有路径前缀为/usr/的条目,绝大多数Linux系统头都存放在该路径下,过滤后即可保留项目自定义的头文件层级输出
效果示例
执行上述命令后输出如下,完美保留缩进层级且无系统依赖:
. a.h .. b.h a.o: a.cc a.h b.h
扩展场景
如果你存在其他路径下的系统头需要过滤(比如安装在/opt/目录下的第三方库),可以叠加过滤规则:
g++ -MM a.cc -H 2>&1 | grep -v '^[.]* /usr/' | grep -v '^[.]* /opt/'
内容的提问来源于stack exchange,提问作者zcfh
相关产品推荐
相关产品推荐

