cmake 技术研究

综述

CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。 它用配置文件控制建构过程(build process)的方式和Unix的make相似,只是CMake的配置文件取名为CMakeLists.txt。CMake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake和SCons等其他类似系统的区别之处。 CMake配置文件(CMakeLists.txt)可设置源代码或目标程序库的路径、产生适配器(wrapper)、还可以用任意的顺序建构可执行文件。CMake支持in-place建构(二进档和源代码在同一个目录树中)和out-of-place建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake也支持静态与动态程序库的建构。
“CMake”这个名字是"Cross platform Make"的缩写。虽然名字中含有"make",但是CMake和Unix上常见的“make”系统是分开的,而且更为高端。 它可与原生建置环境结合使用,例如:make、苹果的Xcode与微软的Visual Studio。
历史
CMake是为了解决美国国家医学图书馆出资的Visible Human Project项目下的Insight Segmentation and Registration Toolkit(ITK)软件的跨平台建构的需求而创造出来的,其设计受到了Ken Martin开发的pcmaker所影响。pcmaker当初则是为了支持Visualization Toolkit(VTK)这个开放源代码的三维图形和视觉系统才出现的,今日VTK也采用了CMake。在设计CMake之时,Kitware公司的Bill Hoffman采用了pcmaker的一些重要想法,加上更多他自己的点子,想把GNU建构系统的一些功能集成进来。CMake最初的实现是在2000年中作的,在2001年初有了急速的进展,许多改良是来自其他把CMake集成到自己的系统中的开发者,比方说,采用CMake作为建构环境的VXL社群就贡献了很多重要的功能,Brad King为了支持CABLE和GCC-XML这套自动包装工具也加了几项功能,通用电气公司的研发部门则用在内部的测试系统DART,还有一些功能是为了让VTK可以过渡到CMake和支持洛斯阿拉莫斯国家实验室的Advanced Computing Lab的平行视觉系统ParaView而加的。
quote:wiki

cmake构件

cmake的安装目录为:

CMAKe
|-----bin
|     |-----CMakeFiles
|     |-----cmake.exe
|     |-----cmake-gui.exe
|     |-----cmcldeps.exe
|     |-----cpack.exe
|     |-----ctest.exe
|
|-----doc
|     |-----cmake
|
|-----man
|
|-----share
|     |-----completions
|     |-----editors
|     |-----Help
|     |-----include
|     |-----Licenses
|     |-----Modules
|     |-----Templates

cmake.exe

用来主要进行生成编译工程

cmake-gui.exe

Windows下的gui配置工具

cmcldeps.exe

cpack.exe

用来生成打包程序

ctest.exe

用于生成测试(单元测试)工程

具体版本的支持情况,可以在share\Modules下看*.cmake文件即可

更新记录

3.0

添加支持CodeLite,Kate,Ninja

3.1

添加支持Visual Studio 14 2015Visual Studio 11 2012Windows PhoneWindows Store类型工程

3.3

添加支持Green Hills MULTI

3.4

添加支持Visual Studio 14 2015Windows SDK版本选择
添加语言支持swift

//check_language(<lang>)
check_language(Fortran)
if(CMAKE_Fortran_COMPILER)
  enable_language(Fortran)
else()
  message(STATUS "No Fortran support")
endif()

// enable_language(<lang> [OPTIONAL] )
// CXX, C, CUDA, OBJC, OBJCXX, Fortran, and ASM

3.5

添加支持ARM Compiler (arm.com) with compiler id ARMCC

3.6

添加支持Visual Studio 14 2015支持 Clang/C2工具集

3.7

添加支持Cross Compiling for Android
添加支持Visual Studio 15 2017

3.8

添加支持CSharp,CUDA,C++17
添加支持Fuchsia操作系统

3.9

XCode添加支持创建XCode schema文件

3.10

添加支持flang Fortran compiler

3.11

添加支持CodeBlocks

3.14

添加支持Visual Studio 16 2019
添加支持Cross Compiling for iOS, tvOS, or watchOS

3.16

添加支持Objective C (OBJC)Objective C++ (OBJCXX)

详细内容

cmake的主要内容包括以下几个部分:

cmake-buildsystem
cmake-commands
cmake-compile-features
cmake-developer
cmake-env-variables
cmake-file-api
cmake-generator-expressions
cmake-generators
cmake-language
cmake-modules
cmake-packages
cmake-policies
cmake-properties
cmake-qt
cmake-server
cmake-toolchains
cmake-variables
cpack-generators