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 2015,Visual Studio 11 2012的Windows Phone和Windows Store类型工程
3.3
添加支持Green Hills MULTI
3.4
添加支持Visual Studio 14 2015的Windows 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