背景:为什么要使用ninja进行项目编译?
Ninja的作用是加速构建,最初目的是替代make,现在Windows系统上也可以用,
也就是用Ninja替代nmake或者MSBuild来生成target。Ninja 是Google的一名程
序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile
来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。
官网:ninja地址
Gitub:ninja-build
关于使用ninja编译和cmake生成sln工程然后进行编译区别
实际上在Windows上使用CMake可以直接进行编译生成.sln工程文件,然后在VS里面进行编译即可。但是那个也仅仅限制于在别人已经写好的基础上进行二次开发进行调试比较边界,但是如果想要利用CMake生成已经调好的程序(没有一点点错误),那么使用我们的ninja构建CMakeLists.txt比
make工具(MSVC编译生成静态库和动态库以及可执行文件)更快,接下来用生成对应的项目程序
来显示它的好处。
使用生成VS工程进行编译
mkdir build_vs
cd build_vs
cmake -G "Visual Studio 16 2019" -A x64 ^
-DCMAKE_BUILD_TYPE=RelWithDebInfo ^
-DCMAKE_TOOLCHAIN_FILE=%CONDA_PREFIX%\h2o.cmake ^
-DH2O_BUILD_SHARED=ON ^
-DH2O_BUILD_TEST=ON ^
-DH2O_BUILD_DOG=OFF ^
-DH2O_BUILD_SERIAL=ON ^
-DH2O_VERSION_NAME=kinsar ^
../
cd ..
生成的sln工程Linsar外层目录如下
生成的sln工程Linsar内层目录如下
进入.sln右键全部生成ALL_BUILD进行编译
使用ninja进行稳定版本的编译
mkdir build
cd build
pushd %VS2019INSTALLDIR%
call VC\Auxiliary\Build\vcvars64.bat
popd
cmake -GNinja ^
-DCMAKE_BUILD_TYPE=RelWithDebInfo ^
-DCMAKE_TOOLCHAIN_FILE=%CONDA_PREFIX%\h2o.cmake ^
-DH2O_BUILD_SHARED=ON ^
-DH2O_BUILD_TEST=ON ^
-DH2O_BUILD_DOG=OFF ^
-DH2O_BUILD_SERIAL=OFF ^
-DH2O_VERSION_NAME=kinsar ^
../
ninja
"bin/kinsar.exe"
pushd %VS2019INSTALLDIR%
call VC\Auxiliary\Build\vcvars64.bat
popd
//给ninja工程指定对应的C++、C编译器
cmake -GNinja ^
//生成ninja工程或者说使用ninja进行编译而不是生成sln进行VS生成makefile编译
ninja
//执行编译过程
"bin/kinsar.exe"
//指定编译完之后的启动项为bin目录下的kinsar.exe,连register步骤都直接省略了
ninja编译过程如下
使用Ninja生成的Linsar外层目录
使用Ninja生成的Linsar内层目录