解析多线程 make 的输出(-j N)
我在公共目录中有很多源目录。当我通过发出命令开始 make 时:
make -j 4
我从 make 的线程接收到大量字符串以及调用的 gcc 编译器实例。 对于解析错误,我必须运行 make 两次,第二次使用一个线程:
make -j 1
这样我就可以正确解析 make 的输出。
有没有一种方法可以运行一次多线程 make 并正确确定与哪个项目(源目录)相关的错误?
谢谢你!
I have a lot of source directories in common directory. When I start make by issuing command:
make -j 4
I receive a lot of strings from make's threads along with invoked gcc compiler instances.
For parsing errors I have to run make twice, second time with one thread:
make -j 1
so I can correctly parse make's output.
Is there a way for running multithreaded make one time and correctly decide which error related to which project (source directory)?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您将递归 make(顽皮男孩)与
-j
一起使用,那么您可以使用 shell 脚本包装 Make,该脚本在输出的每一行前面加上唯一的每次 make 调用字符串作为前缀。现在,假设您的 makefile 正确使用
${MAKE}
来指示递归,我们可以使用./M
而不是make
。在这种情况下,每行都以进程 ID 列表为前缀(有利于调试递归 make)。对于您的用例,您可能更喜欢使用
M
来修改源文件名,以便它们成为错误消息中的绝对路径名。If you are using recursive make (naughty boy) together with
-j
, then you can wrap Make with a shell script which prefixes each line of output with a unique per-make-invocation string.Now, assuming your makefiles correctly use
${MAKE}
to indicate recursion, we can use./M
instead ofmake
.In this case, each line is prefixed with a list of process IDs (good for debugging recursive make). For your use case, you may prefer
M
to mangle source file names so that they become absolute pathnames in error messages.也许可以切换到pmake?
May be it is possible to switch to pmake?
如果您使用某种元构建系统(例如 CMake),请尝试使用 Ninja 来实际运行构建。
它解决了这个问题并且速度更快。
If you're using some kind of meta-build system (eg CMake) try using Ninja to actually run the build.
It solves this problem as well as being quite a lot faster.