有没有办法让clang输出插入回车?使用verbose选项进行编译时,我只是获得了这些巨大的不可读的编译器标志和路径转储。
答案 0 :(得分:0)
使用popen
开始clang
会话。创建一个新的命令行clang -v
(包括空格)并连接您通常提供给clang
本身的参数。在最后一个参数之后,添加2>&1
以将Clang的stderr
输出转换为常规stdout
,以便popen
可以将其选中。然后循环遍历popen
的输入并解析每个单独的行,在您认为合适的位置添加额外信息。
作为一个例子,我使用
抓住了我当地Clang的整套标志clang -cc1 --help
并将其作为我的C程序中的单个长字符串。然后我循环查看popen
的返回结果,扫描以-
开头的标志,当找到一个时,我扫描了长标志字符串。如果它找到了什么,我将它写在绿色的单独一行(使用ANSI转义序列)。然后我测试标志字符串,如果一个参数应该遵循 - 这些通常有一个领先的<...>
指标。如果是这样,我用蓝色写出来。最后,我写出了整个标志说明行,直到我遇到行尾。
使用我非常粗略的程序colorclang
- 123行实际代码 - 我得到这样的输出:
实际上,它测试每个输入行的可能标志,因此存在一些错误着色。更精确的解析是可能的;我必须为单行添加单独的例程,以"/usr/bin/clang"
开头(对于常见的Clang标志),单行以"/usr/bin/ld"
开头(并解析 loader flags),以及每个#include ..
语句之后的行。
在Complete list of clang flags?,Steve Kemp的answer至C: Run a System Command and Get Output?的帮助下拼凑而成,并在对clang -v
推断stderr
次后,{ {3}}到larsman's answer。