Prettify clang -v输出

时间:2015-11-06 22:24:45

标签: c++ c clang

有没有办法让clang输出插入回车?使用verbose选项进行编译时,我只是获得了这些巨大的不可读的编译器标志和路径转储。

1 个答案:

答案 0 :(得分:0)

使用popen开始clang会话。创建一个新的命令行clang -v(包括空格)并连接您通常提供给clang本身的参数。在最后一个参数之后,添加2>&1以将Clang的stderr输出转换为常规stdout,以便popen可以将其选中。然后循环遍历popen的输入并解析每个单独的行,在您认为合适的位置添加额外信息。

作为一个例子,我使用

抓住了我当地Clang的整套标志
clang -cc1 --help

并将其作为我的C程序中的单个长字符串。然后我循环查看popen的返回结果,扫描以-开头的标志,当找到一个时,我扫描了长标志字符串。如果它找到了什么,我将它写在绿色的单独一行(使用ANSI转义序列)。然后我测试标志字符串,如果一个参数应该遵循 - 这些通常有一个领先的<...>指标。如果是这样,我用蓝色写出来。最后,我写出了整个标志说明行,直到我遇到行尾。

使用我非常粗略的程序colorclang - 123行实际代码 - 我得到这样的输出:

colorclang output

实际上,它测试每个输入行的可能标志,因此存在一些错误着色。更精确的解析是可能的;我必须为单行添加单独的例程,以"/usr/bin/clang"开头(对于常见的Clang标志),单行以"/usr/bin/ld"开头(并解析 loader flags),以及每个#include ..语句之后的行。

Complete list of clang flags?,Steve Kemp的answerC: Run a System Command and Get Output?的帮助下拼凑而成,并在对clang -v推断stderr次后,{ {3}}到larsman's answer