如何在gcc -H -fsyntax-only输出中筛选指定C头文件并正确保存输出内容
如何在gcc -H -fsyntax-only输出中筛选指定C头文件并正确保存输出内容
我来帮你解决这个问题!你遇到的核心问题其实是gcc的-H输出并没有走标准输出(stdout),而是标准错误流(stderr),这就是为什么直接用grep或者普通重定向会失效的原因——默认情况下,grep只读取标准输出,>>这类重定向操作也只针对标准输出,所以才会出现抓不到内容、生成空文件的情况。
下面给你几个实用的解决方案:
筛选指定头文件(比如errno.h)
把标准错误流重定向到标准输出,再交给grep处理,命令如下:gcc -H -fsyntax-only myprogram.c 2>&1 | grep errno.h这里的
2>&1是shell里的重定向语法:2代表标准错误的文件描述符,1代表标准输出,这个操作就是把标准错误的内容“转”到标准输出里,这样grep就能捕获到我们需要的头文件路径了。将所有头文件输出保存到文件
如果只想保存内容到文件、不在控制台显示,直接把标准错误重定向到文件即可:gcc -H -fsyntax-only myprogram.c 2> headers_myprogram.txt要是想同时在控制台看到输出、又保存到文件,就结合
tee命令(记得先转stderr到stdout):gcc -H -fsyntax-only myprogram.c 2>&1 | tee headers_myprogram.txt筛选+保存一步到位
如果想把筛选后的特定头文件结果直接保存到文件,同时也能在控制台查看,就把前面的命令组合起来:gcc -H -fsyntax-only myprogram.c 2>&1 | grep errno.h | tee filtered_errno_headers.txt
内容来源于stack exchange
相关产品推荐
相关产品推荐

