zl程序教程

您现在的位置是:首页 >  其它

当前栏目

CMake - 概览

CMake 概览
2023-09-11 14:22:09 时间

关于CMake

CMake是一个可扩展的、开源的系统,在操作系统中使用它时,它以与编译器无关的方式管理的软件构建过程。与许多跨平台系统不同,CMake被设计为与本地构建环境一起使用。放在每个源代码目录下的简单配置文件(称为CMakeLists.txt文件)被用来生成标准的构建文件(例如Unix中的makefiles和Windows MSVC中的projects/workspaces),生成的文件就是平时所用来构建软件的。CMake可以生成一个本地构建环境,用来编译源代码、创建库、生成包装器和构建可执行文件,这些任务可以任意组合。CMake支持in-place和out-of-place构建,因此可以支持从一个源代码树中进行多次构建。CMake还支持静态和动态库的构建。CMake的另一个很好的功能是它生成了一个缓存文件,该文件被设计成可以与图形界面的编辑器一起使用。例如,当CMake运行时,它定位文件、库和可执行文件,并可能遇到可选的构建指令。这些信息被收集到缓存中,在生成本地构建文件之前,用户可以对其进行修改。

CMake被设计用来支持复杂的目录层次和依赖多个库的应用程序。例如,CMake支持由多个工具包(可以是库)组成的项目,其中每个工具包可能包含几个目录,而应用程序依赖于工具包和附加代码。CMake还可以处理这样的情况,即必须构建可执行文件,用来生成代码,然后将代码编译和链接到最终的应用程序中。因为CMake是开源的,并且有一个简单的、可扩展的设计,所以CMake可以在必要时被扩展以支持新的功能。使用CMake很简单。构建过程是通过在组成项目的每个目录(包括子目录)中创建一个或多个CMakeLists.txt文件来控制的。每个CMakeLists.txt由一个或多个命令组成。每个命令都有COMMAND (args...)的形式,其中COMMAND是命令的名称,args是一个用空白分隔的参数列表。CMake提供了许多预定义的命令,但如果你需要,你可以添加你自己的命令。此外,高级用户可以为特定的编译器/操作系统组合添加其他的makefile生成器。(虽然目前支持Unix和MSVC++,但其他开发者正在添加其他编译器/操作系统支持)。你不妨研究一下参考样例,看看更多的细节。

起源

CMake是为了满足NLM资助的作为Visible Human项目一部分的Insight Segmentation and Registration Toolkit(ITK)的需求而创建的,它需要一个强大的、跨平台的构建环境。它受到了Ken Martin和其他开发者创建的名为pcmaker的早期系统的影响,该系统用于支持Visualization Toolkit(VTK)开源3D图形和可视化系统。为了创建CMake,Kitware的Bill Hoffman吸收了pcmaker的一些关键思想,并增加了许多他自己的思想,并考虑采用Unix configure工具的一些功能。最初的CMake实施是在2000年中期,加速发展发生在2001年初。许多改进是由于其他开发者将CMake纳入他们自己的系统而产生的影响。例如,VXL软件社区采用CMake作为他们的构建环境,贡献了许多基本功能。Brad King增加了一些功能,以支持CABLE、自动包装环境和GCC-XML,而GE企业研发部则要求支持他们的测试组件(DART)。其他功能是为了支持VTK的构建环境向CMake的切换,以及支持ParaView,一个 并行可视化系统,在Los Alamos国家实验室的一个高级计算实验室中使用。

了解更多

你可以从Wiki、在线文档和示例中学习CMake。邮件列表也很有帮助。Mastering CMake一书也是学习CMake的一个好方法。

链接如下:

CMake Wiki has moved

Documentation | CMake

Examples | CMake

Discourse Forum | CMake

Commercial Solutions

关于in-place和out-of-place build:

原地构建会在与源代码相同的目录下生成各种编译文件(.o/.obj文件、可执行文件等)。

非原地构建则是在非源码目录下生成这些文件。这意味着相同的源码,你可以有多个非原地构建,如果是原地构建的话就不行了。

An in-place build generates the various compiled files (.o/.obj files, executables, &c.) in the same directory as the source tree.

An out-of-place build generates them in some directory that is not the source directory. This means that you can have several out-of-place builds that all point back to the same source tree, which is not possible once you have an in-place build.

介绍 / Description

cmake 可执行文件是CMake的命令行接口。它可以用来在脚本中配置项目。项目配置的选项可以通过-D选项在命令行中指定。选项-i将使cmake以交互方式提示此类设置。

CMake是一个跨平台的构建系统生成器。项目用独立于平台的 CMake 列表文件来指定它们的构建过程,这些文件包含在源代码树的每个目录中,名称为 CMakeLists.txt。用户通过使用CMake为他们平台上的本地工具生成一个构建系统来构建项目。

The "cmake" executable is the CMake command-line interface. It may be used to configure projects in scripts. Project configuration settings may be specified on the command line with the -D option. The -i option will cause cmake to interactively prompt for such settings.

CMake is a cross-platform build system generator. Projects specify their build process with platform-independent CMake listfiles included in each directory of a source tree with the name CMakeLists.txt. Users build a project by using CMake to generate a build system for a native tool on their platform.

参考:

Overview | CMake

What is the in-place/Out-of-place builds - Stack Overflow

CMake - Cross Platform Make