我刚换了一台新的四核电脑,发现nmake只使用了一个进程。
我曾经使用过make,它有一个开关“-j4”可以启动4个进程。那么nmake的同等选项是什么?
[编辑]
根据下面的信息,我已经能够在我的qmake项目文件中添加一个命令:
QMAKE_CXXFLAGS += /MP
这对于我来说非常有效。非常感谢。
另一种非 Qt 相关的通用方法是设置环境变量 CL
为 /MP
,以告诉 nmake
使用所有核心:
set CL=/MP
nmake
将使用所有的CPU核心。
QT有一个用于此目的的工具: http://download.qt.io/official_releases/jom/
他们还在Qt creator中默认使用它。
nmake
问题,而不是 QT 问题。也许您可以更详细地解释一下。 - jwwnmake
没有这样的选项。/MP
选项并同时传递多个文件来让编译器并行构建多个文件。> cl /MP a.cpp b.cpp c.cpp
然而请注意,大多数Makefile并不会像这样调用编译器 - 它们通常为每个单独的源文件单独调用编译器,这将阻止/MP
选项发挥任何有用的作用。
截至撰写本文时,CMake 2.8.1 RC1已经准备好尝试,为NMake带来了一个名为NMake Makefiles JOM的新生成器,并使用特定设置为jom生成NMake,jom是NMake的替代品。因此,它使用NMake实现了多进程构建。
Incredibuild声称能够在多核/多台机器上运行nmake构建。我没有任何使用经验。
对于普通的makefile来说,这种方法不适用,但是在Visual Studio 2005中有一个设置可以让你同时构建多个.vcproj文件(前提是它们之间没有依赖关系)。打开“工具”->“选项”->“项目和解决方案”->“生成和运行”->“X 最大并行项目构建数”。
虽然不完全相同,但如果您使用cmake
,则可以导出解决方案(例如使用生成器“Visual Studio 14 2015”而不是“NMake Makefiles”)。
在这种情况下,可以使用msbuild
工具构建导出的解决方案,该工具允许您使用/maxcpucount
命令行开关并行化构建过程。
cl a.cpp, cl b.cpp, cl c.cpp, ...
。因此我想指出,除非将构建系统重写为向每个cl命令提供多个文件,例如cl a.cpp b.cpp c.cpp ...
,否则在使用nmake时似乎没有帮助。 - Zitraxset CL=/MP
应该更清楚地被驳回。 这导致了很多不必要的额外工作。 - dvo