cmake技术文档

综述

Note:
cmake没有删除生成文件的的命令,只能手动删除生成的文件。
power shell下可以用rm -r *

变量取值符号为${WHH_PROJECT}

详细内容

cmake命令行用法

cmake命令行命令如下:

cmake [<options>] {<path-to-source> | <path-to-existing-build>}
cmake [{-D <var>=<value>}...] -P <cmake-script-file>
cmake --build <dir> [<options>...] [-- <build-tool-options>...]
cmake --open <dir>
cmake -E <command> [<options>...]
cmake --find-package <options>...

cmake工具可用于配置,生成编译,命令行工具,包寻找等。

配置

-C <initial-cache>

Pre-load a script to populate the cache.
When cmake is first run in an empty build tree, it creates a CMakeCache.txt file and populates it with customizable settings for the project. This option may be used to specify a file from which to load cache entries before the first pass through the project’s cmake listfiles. The loaded entries take priority over the project’s default values. The given file should be a CMake script containing SET commands that use the CACHE option, not a cache-format file.

用于在生成编译文件时,根据指定的cmake文件更新某些cache值
首次生成编译文件时有效,若已生成编译文件,则需要将所有生成的编译相关文件删除
示例命令为:

cmake  -G "Visual Studio 16 2019" -C "..\..\..\whh_cmake\whh_cmake_001.cmake" ..\.

-D <var>:<type>=<value>, -D <var>=<value>

Create or update a cmake cache entry.
When cmake is first run in an empty build tree, it creates a CMakeCache.txt file and populates it with customizable settings for the project. This option may be used to specify a setting that takes priority over the project’s default value. The option may be repeated for as many cache entries as desired.
If the :<type> portion is given it must be one of the types specified by the set() command documentation for its CACHE signature. If the :<type> portion is omitted the entry will be created with no type if it does not exist with a type already. If a command in the project sets the type to PATH or FILEPATH then the <value> will be converted to an absolute path.
This option may also be given as a single argument: -D<var>:<type>=<value> or -D<var>=<value>.

用于创建或者更新某些cache值
可以用于实时更新,不过最好删除以前生成的文件
示例命令为:

cmake -D "WHH_PROJECT:STRING=lib_whh_001" ..\.

-U <globbing_expr>

Remove matching entries from CMake cache.
This option may be used to remove one or more variables from the CMakeCache.txt file, globbing expressions using * and ? are supported. The option may be repeated for as many cache entries as desired.
Use with care, you can make your CMakeCache.txt non-working.

用于从cache中移除匹配的项
可以用于实时更新
示例命令为:

cmake -U "WHH_AUTHOR" ..\.

-G <generator-name>

Specify a build system generator.
CMake may support multiple native build systems on certain platforms. A generator is responsible for generating a particular build system. Possible generator names are specified in the cmake-generators(7) manual.

用于选择生成的编译类型,比如VS2010,VS2015等
支持的编译工程类型有:
Makefile:

Borland
MSYS
MinGW
NMake
NMake Makefiles JOM
Unix
Watom

Ninja:

Ninja

Visual Studio:

VS 6
VS 7
VS 7 .Net 2003
VS 8 2005
VS 9 2008
VS 10 2010
VS 11 2012
VS 12 2013
VS 14 2015
VS 15 2017
VS 16 2019

Green Hills MULTI
Xcode

CodeBlocks
CodeLite
Eclipse CDT4
Kate
Sublime Text 2

-T <toolset-spec>

Toolset specification for the generator, if supported.
Some CMake generators support a toolset specification to tell the native build system how to choose a compiler. See the CMAKE_GENERATOR_TOOLSET variable for details.

用于设置编译工具集
具体可以参见CMAKE_GENERATOR_TOOLSET
VS2010及以上支持,XCode支持,Green Hills MULTI支持
VS中可以选v100 v110 v140 v141 v142等,对应的cmake参数为CMAKE_VS_PLATFORM_TOOLSET
不可以实时更新工具集,需要在首次的时候进行设置
示例命令为:

cmake -T "v141" ..\.

-A <platform-name>

Specify platform name if supported by generator.
Some CMake generators support a platform name to be given to the native build system to choose a compiler or SDK. See the CMAKE_GENERATOR_PLATFORM variable for details.

用于设置编译的平台类型,比如x64,x86,arm之类的
VS,Green HIlls MULTI支持该选项
事实上在VS上以下指令效果相同

cmake -G "Visual Studio 16 2013 Win64" ../.
cmake -G "Visual Studio 16 2013" -A "Win64" ../.

VS2019不支持该选项

-Wno-dev

Suppress developer warnings.
Suppress warnings that are meant for the author of the CMakeLists.txt files. By default this will also turn off deprecation warnings.

用于关闭警告信息

-Wdev

Enable developer warnings.
Enable warnings that are meant for the author of the CMakeLists.txt files. By default this will also turn on deprecation warnings.

用于打开警告信息

-Werror=dev

Make developer warnings errors.
Make warnings that are meant for the author of the CMakeLists.txt files errors. By default this will also turn on deprecated warnings as errors.

使警告变成错误呈现

-Wno-error=dev

Make developer warnings not errors.
Make warnings that are meant for the author of the CMakeLists.txt files not errors. By default this will also turn off deprecated warnings as errors.

使警告不变成错误呈现

·-Wdeprecated·
Enable deprecated functionality warnings.
Enable warnings for usage of deprecated functionality, that are meant for the author of the CMakeLists.txt files.

用于打开模块弃用警告

-Wno-deprecated

Suppress deprecated functionality warnings.
Suppress warnings for usage of deprecated functionality, that are meant for the author of the CMakeLists.txt files.

关闭模块弃用警告

-Werror=deprecated

Make deprecated macro and function warnings errors.
Make warnings for usage of deprecated macros and functions, that are meant for the author of the CMakeLists.txt files, errors.

将模块弃用警告变成错误呈现

-Wno-error=deprecated

Make deprecated macro and function warnings not errors.
Make warnings for usage of deprecated macros and functions, that are meant for the author of the CMakeLists.txt files, not errors.

不将模块弃用警告变成错误呈现

-L[A][H]

List non-advanced cached variables.
List cache variables will run CMake and list all the variables from the CMake cache that are not marked as INTERNAL or ADVANCED. This will effectively display current CMake settings, which can then be changed with -D option. Changing some of the variables may result in more variables being created. If A is specified, then it will display also advanced variables. If H is specified, it will also display help for each variable.

列出 no-advanced cached变量,不理解,待测试

--open <dir>

Open the generated project in the associated application. This is only supported by some generators.

用相应的IDE打开生成的工程
示例命令:

cmake -G "Visual Studio 16 2019" ..\.
cmake --open .

-N

View mode only.
Only load the cache. Do not actually run configure and generate steps.

只载入cache,不生成
有什么用?待探索

-P <file>

Process script mode.
Process the given cmake file as a script written in the CMake language. No configure or generate step is performed and the cache is not modified. If variables are defined using -D, this must be done before the -P argument.

处理脚本,不生成

--graphviz=[file]

Generate graphviz of dependencies, see CMakeGraphVizOptions for more.
Generate a graphviz input file that will contain all the library and executable dependencies in the project. See the documentation for CMakeGraphVizOptions for more details.

用于生成包含项目中所有依赖的graphviz文件(向量图 *.dot)

--system-information [file]

Dump information about this system.
Dump a wide range of information about the current system. If run from the top of a binary tree for a CMake project it will dump additional information such as the cache, log files etc.

将系统信息写入文件

--debug-trycompile

Do not delete the try_compile build tree. Only useful on one try_compile at a time.
Do not delete the files and directories created for try_compile calls. This is useful in debugging failed try_compiles. It may however change the results of the try-compiles as old junk from a previous try-compile may cause a different test to either pass or fail incorrectly. This option is best used for one try-compile at a time, and only when debugging.

与try-compile有关,待研究

--debug-output

Put cmake in a debug mode.
Print extra information during the cmake run like stack traces with message(send_error ) calls.

将cmake处于debug模式,将会打印出debug信息

--trace

Put cmake in trace mode.
Print a trace of all calls made and from where.

将cmake处于trace模式,将会打印出trace信息

--trace-expand

Put cmake in trace mode.
Like --trace, but with variables expanded.

trace扩展,变量扩展

--trace-source=<file>

Put cmake in trace mode, but output only lines of a specified file.
Multiple options are allowed.

只打印指定文件的信息

--warn-uninitialized

Warn about uninitialized values.
Print a warning when an uninitialized variable is used.

打印未初始化变量使用信息

--warn-unused-vars

Warn about unused variables.
Find variables that are declared or set, but not used.

打印未使用变量的信息

--no-warn-unused-cli

Don’t warn about command line options.
Don’t find variables that are declared on the command line, but not used.

不警告命令行参数未使用信息

--check-system-vars

Find problems with variable usage in system files.
Normally, unused and uninitialized variables are searched for only in CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR. This flag tells CMake to warn about other files as well.

系统参数使用检查?待探索

--help,-help,-usage,-h,-H,/?

Print usage information and exit.
Usage describes the basic command line interface and its options.

cmake用法

--version,-version,/V [<f>]

Show program name/version banner and exit.
If a file is specified, the version is written into it. The help is printed to a named <f> file if given.

显示cmake版本,也可以将版本号写到文件中,可以用于自动构建

--help-full [<f>]

Print all help manuals and exit.
All manuals are printed in a human-readable text format. The help is printed to a named <f> file if given.

显示帮助手册

--help-manual <man> [<f>]

Print one help manual and exit.
The specified manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

显示帮助手册

--help-manual-list [<f>]

List help manuals available and exit.
The list contains all manuals for which help may be obtained by using the --help-manual option followed by a manual name. The help is printed to a named <f> file if given.

--help-command <cmd> [<f>]

Print help for one command and exit.
The cmake-commands(7) manual entry for <cmd> is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-command-list [<f>]

List commands with help available and exit.
The list contains all commands for which help may be obtained by using the --help-command option followed by a command name. The help is printed to a named <f> file if given.

--help-commands [<f>]

Print cmake-commands manual and exit.
The cmake-commands(7) manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-module <mod> [<f>]

Print help for one module and exit.
The cmake-modules(7) manual entry for <mod> is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-module-list [<f>]

List modules with help available and exit.
The list contains all modules for which help may be obtained by using the --help-module option followed by a module name. The help is printed to a named <f> file if given.

--help-modules [<f>]

Print cmake-modules manual and exit.
The cmake-modules(7) manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

policy是cmkae用于向后兼容的策略
--help-policy <cmp> [<f>]

Print help for one policy and exit.
The cmake-policies(7) manual entry for <cmp> is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-policy-list [<f>]

List policies with help available and exit.
The list contains all policies for which help may be obtained by using the --help-policy option followed by a policy name. The help is printed to a named <f> file if given.

--help-policies [<f>]

Print cmake-policies manual and exit.
The cmake-policies(7) manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

各类属性:目录,全域,生成目标,测试,源文件,cache条目,安装文件
--help-property <prop> [<f>]

Print help for one property and exit.
The cmake-properties(7) manual entries for <prop> are printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-property-list [<f>]

List properties with help available and exit.
The list contains all properties for which help may be obtained by using the --help-property option followed by a property name. The help is printed to a named <f> file if given.

--help-properties [<f>]

Print cmake-properties manual and exit.
The cmake-properties(7) manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-variable <var> [<f>]

Print help for one variable and exit.
The cmake-variables(7) manual entry for <var> is printed in a human-readable text format. The help is printed to a named <f> file if given.

--help-variable-list [<f>]

List variables with help available and exit.
The list contains all variables for which help may be obtained by using the --help-variable option followed by a variable name. The help is printed to a named <f> file if given.

--help-variables [<f>]

Print cmake-variables manual and exit.
The cmake-variables(7) manual is printed in a human-readable text format. The help is printed to a named <f> file if given.

生成编译

cmake --build <dir> [<options>...] [-- <build-tool-options>...]
/*
--build <dir>
Project binary directory to be built. This is required and must be first.
二进制目标文件目录

-j [<jobs>], --parallel [<jobs>]
The maximum number of concurrent processes to use when building. If <jobs> is omitted the native build tool’s default number is used.
The CMAKE_BUILD_PARALLEL_LEVEL environment variable, if set, specifies a default parallel level when this option is not given.
编译线程数

--target <tgt>
Build <tgt> instead of default targets. May only be specified once.
编译目标

--config <cfg>
For multi-configuration tools, choose configuration <cfg>.
选择配置

--clean-first
Build target clean first, then build. (To clean only, use --target clean.)
先清理再编译

--use-stderr
Ignored. Behavior is default in CMake >= 3.0.

--
Pass remaining options to the native tool.
*/

不懂,待探索

命令行工具

cmake -E <command> [<options>...]
/*
capabilities
Report cmake capabilities in JSON format. The output is a JSON object with the following keys:

version
    A JSON object with version information. Keys are:
        string
            The full version string as displayed by cmake --version.
        major
            The major version number in integer form.
        minor
            The minor version number in integer form.
        patch
            The patch level in integer form.
        suffix
            The cmake version suffix string.
        isDirty
            A bool that is set if the cmake build is from a dirty tree.

generators
    A list available generators. Each generator is a JSON object with the following keys:
        name
            A string containing the name of the generator.
        toolsetSupport
            true if the generator supports toolsets and false otherwise.
        platformSupport
            true if the generator supports platforms and false otherwise.
        extraGenerators
            A list of strings with all the extra generators compatible with the generator.

serverMode
    true if cmake supports server-mode and false otherwise.

chdir <dir> <cmd> [<arg>...]
    Change the current working directory and run a command.

compare_files <file1> <file2>
    Check if <file1> is same as <file2>. If files are the same, then returns 0, if not it returns 1.

copy <file>... <destination>
    Copy files to <destination> (either file or directory). If multiple files are specified, the <destination> must be directory and it must exist. Wildcards are not supported.

copy_directory <dir>... <destination>
    Copy directories to <destination> directory. If <destination> directory does not exist it will be created.

copy_if_different <file>... <destination>
    Copy files to <destination> (either file or directory) if they have changed. If multiple files are specified, the <destination> must be directory and it must exist.

echo [<string>...]
    Displays arguments as text.

echo_append [<string>...]
    Displays arguments as text but no new line.

env [--unset=NAME]... [NAME=VALUE]... COMMAND [ARG]...
    Run command in a modified environment.

environment
    Display the current environment variables.

make_directory <dir>...
    Create <dir> directories. If necessary, create parent directories too. If a directory already exists it will be silently ignored.

md5sum <file>...
    Create MD5 checksum of files in md5sum compatible format:
        351abe79cd3800b38cdfb25d45015a15  file1.txt
        052f86c15bbde68af55c7f7b340ab639  file2.txt

sha1sum <file>...
    Create SHA1 checksum of files in sha1sum compatible format:
        4bb7932a29e6f73c97bb9272f2bdc393122f86e0  file1.txt
        1df4c8f318665f9a5f2ed38f55adadb7ef9f559c  file2.txt

sha224sum <file>...
    Create SHA224 checksum of files in sha224sum compatible format:
        b9b9346bc8437bbda630b0b7ddfc5ea9ca157546dbbf4c613192f930  file1.txt
        6dfbe55f4d2edc5fe5c9197bca51ceaaf824e48eba0cc453088aee24  file2.txt

sha256sum <file>...
    Create SHA256 checksum of files in sha256sum compatible format:
        76713b23615d31680afeb0e9efe94d47d3d4229191198bb46d7485f9cb191acc  file1.txt
        15b682ead6c12dedb1baf91231e1e89cfc7974b3787c1e2e01b986bffadae0ea  file2.txt

sha384sum <file>...
    Create SHA384 checksum of files in sha384sum compatible format:
        acc049fedc091a22f5f2ce39a43b9057fd93c910e9afd76a6411a28a8f2b8a12c73d7129e292f94fc0329c309df49434  file1.txt
        668ddeb108710d271ee21c0f3acbd6a7517e2b78f9181c6a2ff3b8943af92b0195dcb7cce48aa3e17893173c0a39e23d  file2.txt

sha512sum <file>...
    Create SHA512 checksum of files in sha512sum compatible format:
        2a78d7a6c5328cfb1467c63beac8ff21794213901eaadafd48e7800289afbc08e5fb3e86aa31116c945ee3d7bf2a6194489ec6101051083d1108defc8e1dba89  file1.txt
        7a0b54896fe5e70cca6dd643ad6f672614b189bf26f8153061c4d219474b05dad08c4e729af9f4b009f1a1a280cb625454bf587c690f4617c27e3aebdf3b7a2d  file2.txt

remove [-f] <file>...
    Remove the file(s). If any of the listed files already do not exist, the command returns a non-zero exit code, but no message is logged. The -f option changes the behavior to return a zero exit code (i.e. success) in such situations instead.

remove_directory <dir>
    Remove a directory and its contents. If a directory does not exist it will be silently ignored.

rename <oldname> <newname>
    Rename a file or directory (on one volume).

server
    Launch cmake-server(7) mode.

sleep <number>...
    Sleep for given number of seconds.

tar [cxt][vf][zjJ] file.tar [<options>...] [--] [<file>...]
    Create or extract a tar or zip archive. Options are:
        --
            Stop interpreting options and treat all remaining arguments as file names even if they start in -.
        --files-from=<file>
            Read file names from the given file, one per line. Blank lines are ignored. Lines may not start in - except for --add-file=<name> to add files whose names start in -.
        --mtime=<date>
            Specify modification time recorded in tarball entries.
        --format=<format>
            Specify the format of the archive to be created. Supported formats are: 7zip, gnutar, pax, paxr (restricted pax, default), and zip.

time <command> [<args>...]
    Run command and display elapsed time.

touch <file>
    Touch a file.

touch_nocreate <file>
    Touch a file if it exists but do not create it. If a file does not exist it will be silently ignored.
*/

这一类命令可以完全由于宽平台的脚本构建

UNIX独有命令行工具
/*
create_symlink <old> <new>
    Create a symbolic link <new> naming <old>.
*/
Windows独有命令行工具
/*
delete_regv <key>
    Delete Windows registry value.

env_vs8_wince <sdkname>
    Displays a batch file which sets the environment for the provided Windows CE SDK installed in VS2005.

env_vs9_wince <sdkname>
    Displays a batch file which sets the environment for the provided Windows CE SDK installed in VS2008.
*/

包寻找

cmake --find-package <options>...
只支持Makefile类的包寻找,类似pkg-config