首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析多线程make的输出(-j N)

问解析多线程make的输出(-j N)
EN

Stack Overflow用户
提问于 2010-12-24 21:07:50
回答 3查看 2.4K关注 0票数 3

我在通用目录下有很多源码目录。当我通过发出命令启动make时:

代码语言:javascript
复制
make -j 4

我收到了很多来自make的线程的字符串,还有被调用的gcc编译器实例。为了解析错误,我必须运行make两次,第二次使用一个线程:

代码语言:javascript
复制
make -j 1

这样我就可以正确地解析make的输出。

有没有一种方法可以运行多线程make一次,并正确判断哪个错误与哪个项目(源目录)有关?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-24 22:22:57

如果您将递归make (淘气男孩)与-j一起使用,那么可以使用shell脚本包装Make,该脚本在输出的每一行前面加上一个惟一的每个make调用字符串。

代码语言:javascript
复制
$ cat M
#!/bin/bash
PREFIX=$$:
exec -a $0 make "$@" 2>&1 | sed "s/^/$PREFIX/"

现在,假设您的makefile正确地使用${MAKE}来表示递归,我们可以使用./M而不是make。

代码语言:javascript
复制
$ ./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...
∶

在这种情况下,每一行都有一个进程ID列表作为前缀(这对于调试递归make很好)。对于您的用例,您可能更喜欢使用M来修改源文件名,以便它们成为错误消息中的绝对路径名。

票数 6
EN

Stack Overflow用户

发布于 2011-01-21 16:55:42

有没有可能切换到pmake?

PMake设置为以优雅的方式(source)

处理多个作业的输出

票数 1
EN

Stack Overflow用户

发布于 2012-09-20 23:39:56

如果您正在使用某种元构建系统(例如CMake),请尝试使用Ninja来实际运行构建。

它解决了这个问题,而且速度要快得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4526524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档