CMake基础第10节使⽤ninja构建
介绍
如前所述,CMake是⼀个元(meta)构建系统,可⽤于为许多其他构建⼯具创建构建⽂件。这个例⼦展⽰了如何让CMake使⽤ninja构建⼯具。
本教程中的⽂件如下:
$ tree
.
├──
├── main.cpp
[] - 包含要运⾏的CMake命令
# Set the minimum version of CMake that can be used
# To find the cmake version run
# $ cmake --version
cmake_minimum_required(VERSION 3.5)
# Set the project name
project (hello_cmake)
# Add an executable
add_executable(hello_cmake main.cpp)
[main.cpp] - ⼀个简单的“Hello World”CPP⽂件
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "Hello CMake!" << std::endl;
return 0;
}
概念
⽣成器
CMake⽣成器负责为底层构建系统编写输⼊⽂件(例如Makefile)。运⾏cmake--help将显⽰可⽤的⽣成器。对于cmake v2.8.12.2,我的系统⽀持的⽣成器包括:Generators
The following generators are available on this platform:
Unix Makefiles              = Generates standard UNIX makefiles.
Ninja                      = Generates build.ninja files (experimental).
CodeBlocks - Ninja          = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
Eclipse CDT4 - Ninja        = Generates Eclipse CDT 4.0 project files.
Eclipse CDT4 - Unix Makefiles
= Generates Eclipse CDT 4.0 project files.
KDevelop3                  = Generates KDevelop 3 project files.
KDevelop3 - Unix Makefiles  = Generates KDevelop 3 project files.
Sublime Text 2 - Ninja      = Generates Sublime Text 2 project files.
Sublime Text 2 - Unix Makefiles
= Generates Sublime Text 2 project files.Generators
正如本⽂所述,CMake包括不同类型的⽣成器,如命令⾏⽣成器、IDE⽣成器和其他⽣成器。
命令⾏⽣成⼯具⽣成器
这些⽣成器⽤于命令⾏构建⼯具,如Make和Ninja。在使⽤CMake⽣成构建系统之前,必须配置所选的⼯具链。
⽀持的⽣成器包括:
Borland Makefiles
MSYS Makefiles
MinGW Makefiles
NMake Makefiles
NMake Makefiles JOM
Ninja
Unix Makefiles
Watcom WMake
IDE构建⼯具⽣成器
这些⽣成器⽤于集成开发环境,其中包括它们⾃⼰的编译器。例如Visual Studio和Xcode,它们本⾝就包含⼀个编译器。
⽀持的⽣成器包括:
Visual Studio 6
Visual Studio 7
Visual Studio 7 .NET 2003
Visual Studio 8 2005
Visual Studio 9 2008
Visual Studio 10 2010
Visual Studio 11 2012
Visual Studio 12 2013
Xcode
其他⽣成器
这些⽣成器创建配置并与其他IDE⼯具共同⼯作,并且必须包含在IDE或命令⾏⽣成器中。
⽀持的⽣成器包括:
CodeBlocks
CodeLite
Eclipse CDT4
KDevelop3
Kate
Sublime Text 2
Note在本例中,ninja是通过命令sudo apt-get install ninja-build安装的。
调⽤⽣成器
要调⽤CMake⽣成器,可以使⽤-G命令⾏开关,例如:
cmake .. -G Ninja
完成上述操作后,CMake将⽣成所需的Ninja构建⽂件,这些⽂件可以通过使⽤Ninja命令运⾏。
$ cmake .. -G Ninja
$ ls
build.ninja    CMakeFiles  ake  rules.ninja
构建⽰例
下⾯是构建此⽰例的⽰例输出。
$ mkdir build.ninja
$ cd build.ninja/
$ cmake .. -G Ninja
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-
- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Ninja
-- Check for working CXX compiler using: Ninja -- works
-- Detecting CXX compiler ABI info
cmake如何使用
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/matrim/workspace/cmake-examples/01-basic/J-building-with-ninja/build.ninja
$ ninja -v
[1/2] /usr/bin/c++    -MMD -MT CMakeFiles/hello_cmake.dir/main.cpp.o -MF "CMakeFiles/hello_cmake.dir/d" -o CMakeFiles/hello_cmake.dir/main.cpp.o -c ../main.cpp [2/2] : && /usr/bin/c++      CMakeFiles/hello_cmake.dir/main.cpp.o  -o hello_cmake  -rdynamic && :
$ ls
build.ninja    CMakeFiles  ake  hello_cmake  rules.ninja
$ ./hello_cmake
Hello CMake!