公司一直在用CMake构建工程,只是平时会一点基本的语法,但是没系统的学习过,包括Makefile就更没看过了,所以打算自己翻译一下官方文档学习一下。
选顶CMake版本为3.15
大纲:
Generate a Project Buildsystem cmake [<options>] <path-to-source> cmake [<options>] <path-to-existing-build> cmake [<options>] -S <path-to-source> -B <path-to-build> Build a Project cmake --build <dir> [<options>] [-- <build-tool-options>] Install a Project cmake --install <dir> [<options>] Open a Project cmake --open <dir> Run a Script cmake [{-D <var>=<value>}...] -P <cmake-script-file> Run a Command-Line Tool cmake -E <command> [<options>] Run the Find-Package Tool cmake --find-package [<options>] View Help cmake --help[-<topic>]
首先看一下官方文档对CMake的介绍:
buildsystem描述了如何使用构建工具自动化的从源代码构建项目的可执行文件和库。 例如,buildsystem可以是用于命令行生成工具的Makefile,也可以是用于集成开发环境(IDE)的项目文件。 为了避免维护多个这样的buildsystem,项目可以使用以CMake语言编写的文件抽象地指定其buildsystem。 从这些文件中,CMake通过称为生成器的后端为每个用户在本地生成首选buildsystem。
要使用CMake生成构建系统,必须有Source Tree、Build Tree和生成器。Source Tree从工程顶层目录的CMakelist.txt开始,对不同平台可以手动在其中指定不同的target和依赖关系,Build Tree主要是输出内容,比如windows下面的vs工程,mac下面的xcode工程等,生成器应该基本就是指CMake生成不同平台或者不同项目的指令了。
接下来就是CMake的一些基础指令介绍了,这一小节就介绍一下 “Generate a Project Buildsystem” 的三个指令。
- 首先是一些构建buildsystem的指令:
- cmake [<options>] <path-to-source> 当前文件夹作为Build Tree, <path-to-source> 指定Source Tree,相对当前文件夹的路径和绝对路径都可以,Source Tree必须有 CMakeLists.txt 文件,而且不能有 CMakeCache.txt 文件存在,后者会标志已经存在Build Tree。例如:
$ mkdir build ; cd build $ cmake ../src
- cmake [<options>] <path-to-existing-build> 把<path-to-existing-build> 当作Build Tree,并从 CMakeCache.txt 中读取Source Tree路径。 必须已经使用CMake构建过项目。 路径可以是相对路径和绝对路径。例如:
$ cd build $ cmake .
- cmake [<options>] -S <path-to-source> -B <path-to-build>是把<path-to-build> 当作Build Tree,把 <path-to-source>当作Source Tree,相对当前文件夹的路径和绝对路径都可以,Source Tree必须有 CMakeLists.txt 文件。如果不存在Build Tree则会自动创建。例如:
$ cmake -S src -B build
以上所有的options都可以为空或者是以下要说的内容。
生成完buildsystem之后就可以使用本地相应的开发工具来继续开发项目。例如unix Makefiles生成之后可以直接跑 “make” 指令 $make和make install
- 下面介绍一些options
- -S <path-to-source> 指定Source Tree的路径
- -B <path-to-build> 指定Build Tree路径,不存在则创建
- -C <initial-cache> 预加载脚本填充cache。当CMake首次运行在一个空的Build Tree的时候,会创建一个CMakeCache.txt文件并用可自定义的项目设置填充。 此选项可用于指定一个文件,该文件将在第一次通过项目的CMake列表文件之前从中加载缓存项,优先级高于项目的默认值,指定的文件应该是包含 cache 选项的set() (以后会讲这个命令)命令的 CMake脚本,而不是cache-format类型的文件。
- -D <var>:<type>=<value>, -D <var>=<value> 创建或更新CMake cache。如果指定了:<type>部分,则该部分必须是set()命令文档为其cache签名指定的类型之一。 如果省略:<type>部分,则该条目将不创建任何类型(如果该类型尚不存在)。 如果项目中的命令将类型设置为PATH或FILEPATH,则<value>将转换为绝对路径。此选项也可以作为单个参数给出:-D <var>:<type> = <value>或-D <var> = <value>。
- -U <globbing_expr>