Den*_*kov 3 parsing multithreading gcc makefile
我在公共目录中有很多源目录.当我通过发出命令开始make:
make -j 4
Run Code Online (Sandbox Code Playgroud)
我从make的线程和调用的gcc编译器实例中收到了很多字符串.对于解析错误,我必须运行make两次,第二次使用一个线程:
make -j 1
Run Code Online (Sandbox Code Playgroud)
所以我可以正确解析make的输出.
有没有办法运行多线程make一次并正确地决定哪个错误与哪个项目(源目录)相关?
谢谢!
如果您正在使用递归make(顽皮的男孩)-j,那么您可以使用shell脚本包装Make,该脚本在每行输出前面添加一个唯一的per-make-invocation字符串.
$ cat M
#!/bin/bash
PREFIX=$$:
exec -a $0 make "$@" 2>&1 | sed "s/^/$PREFIX/"
Run Code Online (Sandbox Code Playgroud)
现在,假设您的makefile正确用于${MAKE}表示递归,我们可以使用./M而不是make.
$ ./M -j --no-print-directory target
28720:/home/user/M -fa.mak
28720:/home/user/M -fb.mak
28720:/home/user/M -fc.mak
28720:/home/user/M -fd.mak
28720:/home/user/M -fe.mak
28720:32484:gcc blah...
28720:31936:/home/user/M -fanother.mak
28720:32484:gcc blah...
28720:31936:gcc blah...
28720:31936:gcc blah...
28720:31936:56781:echo blah...
?
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每一行都以一个进程ID列表为前缀(适用于调试递归make).对于您的用例,您可能更喜欢M破坏源文件名,以便它们成为错误消息中的绝对路径名.
| 归档时间: |
|
| 查看次数: |
2340 次 |
| 最近记录: |