cmake: 使用jom实现msvc工程并发编译提高速度(-j)
2017-06-28 21:43
295 查看
msvc提供的nmake并没有并发编译功能(类似gcc make的-j参数指定并发编译的任务数),
而第三方工具jom(http://wiki.qt.io/Jom)解决了这个问题,jom可以像gcc 的make一样 通过-j参数指定并发编译,让cpu全速运行,可以大大提高编译速度,节省大型项目的编译时间。
cmake也支持jom编译,cmake 有一个名为”NMake Makefiles JOM”的CMake Generator就是用来生成jom格式的Makefile.下面以编译gflags为例说明jom编译的使用方法
生成jom的Makefile
如果不把jom的路径加到%PATH%中,也可以如下通过 定义CMAKE_MAKE_PROGRAM变量来指定jom.exe的位置
然后就可以如下使用jom编译了, -j参数用于指定并发任务数
以下是MSBuild的maxcpucount参数说明:
devenv.exe 默认就是并发编译的
而第三方工具jom(http://wiki.qt.io/Jom)解决了这个问题,jom可以像gcc 的make一样 通过-j参数指定并发编译,让cpu全速运行,可以大大提高编译速度,节省大型项目的编译时间。
cmake也支持jom编译,cmake 有一个名为”NMake Makefiles JOM”的CMake Generator就是用来生成jom格式的Makefile.下面以编译gflags为例说明jom编译的使用方法
获取jom
访问jom官网(http://wiki.qt.io/Jom)下载jom 的二进制压缩包解压到本地的文件夹,jom就算是安装好了(jom很小,只有5个文件)cmake
将jom所在文件夹加到PATH环境变量set path=d:\caffe-static\tools\jom-1.1.2;%path%
生成jom的Makefile
gflags_source_folder>cmake -G "NMake Makefiles JOM" .
如果不把jom的路径加到%PATH%中,也可以如下通过 定义CMAKE_MAKE_PROGRAM变量来指定jom.exe的位置
gflags_source_folder>cmake -G "NMake Makefiles JOM" -DCMAKE_MAKE_PROGRAM=d:\jom-1.1.2\jom.exe .
然后就可以如下使用jom编译了, -j参数用于指定并发任务数
gflags_source_folder>jom -j 8
补记:
其实MSVC提供的MSBuild.exe和devenv.exe,也提供了并发编译功能,只是参数调用不同,稍显复杂。以下是MSBuild的maxcpucount参数说明:
/maxcpucount[:n] 指定用于生成的最大 并发进程数。如果未使用开关,则使用的默认值 为 1。如果使用开关时不带值, MSBuild 将最多使用计算机上的 处理器数。(缩写: /m[:n])
devenv.exe 默认就是并发编译的
相关文章推荐
- QT小知识点(3) -Qt Creator 使用技巧之提高编译速度【使用jom参数】
- Qt Creator 使用技巧之提高编译速度【使用jom参数】
- Cmake编译OpenCV和如何在VS工程中配置来使用编译后的OpenCV进行跟踪调试问题
- 提高安卓的编译速度 -- 使用ccache
- 在Android中使用并发来提高速度和性能
- win10 使用cmake编译opencv源码生成VS工程(二)
- windows下编译使用opencv的cmake工程
- 使用distcc进行分布式编译来提高编译速度
- 在Android中使用并发来提高速度和性能
- Tensorflow使用Cmake在Windows下生成VisualStudio工程并编译
- cmake:msvc编译第三方库时使用/MT静态库连接c/c++ runtime library
- 采用Psyco实现python执行速度提高到与编译语言一样的水平
- 使用cmake编译protobuf生成vs2010工程
- 树莓派 安装 OpenCV 使用CMake 编译工程 最新版2015
- Qt5.7以及5.8在cmake工程中使用C++14编译遇到的问题及解决方案
- (ubuntu)在andorid andk工程中使用ccache加速编译速度
- 采用Psyco实现python执行速度提高到与编译语言一样的水平
- 使用distcc进行分布式编译来提高编译速度。
- 在Android中使用并发来提高速度和性能
- linux下编译工程(使用命令行、Makefile、cmake编译helloworld)