相关疑难解决方法(0)

递归调用中的并行构建作业数

我有一个 makefile,它将真正的构建包装在单个递归调用中,以便获取并发布围绕构建的许可证,无论构建是否成功。例子:

\n\n
.PHONY main_target\nmain_target:\n    @license_grab &\n    @sleep 2\n    -@$(MAKE) real_target\n    @license_release\n
Run Code Online (Sandbox Code Playgroud)\n\n

这非常有效,直到我想并行运行 make 为止。在某些系统上它工作正常,但在其他系统上,当将选项传递给子 make时,我遇到了 -j 标志记录的问题:

\n\n
\n

如果您的操作系统不支持上述通信,则 \xe2\x80\x98-j 1\xe2\x80\x99 始终会放入 MAKEFLAGS 而不是您指定的值。这是因为,如果将 \xe2\x80\x98-j\xe2\x80\x99 选项传递给子品牌,则并行运行的作业将比您要求的多得多。

\n
\n\n

由于我只有一次递归调用,因此我真的很想将 -j 标志原封不动地传递给子 make。我不想将 -j 标志(带有数字)硬编码到 makefile 中,因为 makefile 在具有不同数量处理器的多台机器上运行。我不想无限制地使用 -j ,因为这会立即启动一堆进程,而不是等待作业完成。我在构建时尝试使用 -l 标志,但我发现限制不会立即应用,可能是因为限制在 make 可以开始采样之前才应用

\n\n

有没有办法强制子品牌使用多个作业?或者,一种使 -l 标志真正完成某事的方法?

\n\n

我想我可以使用 makefile 修改来完成它-@$(MAKE) $(JOBS) real_target,例如 using 和调用 make like make JOBS="-j4" main_target

\n\n

但是,我更愿意只使用标准 make 参数,而不是添加对变量的额外依赖项。我还希望尽可能少地修改 makefile。

\n

makefile gnu-make

5
推荐指数
1
解决办法
3553
查看次数

如何加快Linux中的编译时间

在 linux 下编译时,我使用标志 -j16,因为我有 16 个内核。我只是想知道使用诸如 -j32 之类的东西是否有意义。实际上,这是一个关于处理器时间调度的问题,以及是否可以通过这种方式对特定进程施加比其他任何方法更大的压力(假设我想用 -j16 并行编译每个进程,如果一个是 -j32 呢?) . 我认为这没有多大意义,但我不确定,因为不知道内核如何解决这些问题。

亲切的问候,

linux compiler-construction kernel

3
推荐指数
1
解决办法
4521
查看次数