CMake 手册详解[转-格式整理]
目录
CMake 手册详解[转-格式整理] ............................................................................................................................................... 1
0 引言 ............................................................................................................................................................................... 4
1 命令名称 ....................................................................................................................................................................... 4
2 用法 ............................................................................................................................................................................... 4
3 描述 ............................................................................................................................................................................... 4
4 选项 ............................................................................................................................................................................... 4
4.1 -C .......................................................................................................................................................................... 4
4.2 -D ......................................................................................................................................................................... 4
4.3 -U ......................................................................................................................................................................... 5
4.4 -G ......................................................................................................................................................................... 5
4.5 -E .......................................................................................................................................................................... 5
4.6 -i ........................................................................................................................................................................... 5
4.7 -L .......................................................................................................................................................................... 5
4.8 --build................................................................................................................................................................... 5
4.9 --target ................................................................................................................................................................. 6
4.10 --config ............................................................................................................................................................... 6
4.11 –clean-first ......................................................................................................................................................... 6
4.12 -N ....................................................................................................................................................................... 6
4.13 -P ........................................................................................................................................................................ 6
4.14 –graphviz ............................................................................................................................................................ 6
4.15 –system-information .......................................................................................................................................... 6
4.16 –debug-trycompile ............................................................................................................................................ 6
4.17 --debug-output .................................................................................................................................................. 7
4.18 --trace ................................................................................................................................................................ 7
4.19 –help-command ................................................................................................................................................. 7
4.20 –help-command-list ........................................................................................................................................... 7
4.21 –help-commands ............................................................................................................................................... 7
4.22 –help-compatcommands ................................................................................................................................... 7
4.23--help-module ..................................................................................................................................................... 7
4.24 --help-module-list .............................................................................................................................................. 8
4.25 --help-modules .................................................................................................................................................. 8
4.26 --help-custom-modules ..................................................................................................................................... 8
4.27 --help-policy ....................................................................................................................................................... 8
4.28 --help-policies .................................................................................................................................................... 8
4.29 --help-property .................................................................................................................................................. 8
4.30 --help-property-list ............................................................................................................................................ 8
4.31 --help-properties ................................................................................................................................................ 9
4.32 --help-variable ................................................................................................................................................... 9
4.33 --help-variable-list .............................................................................................................................................. 9
4.34 --help-variables .................................................................................................................................................. 9
4.35 –copyright .......................................................................................................................................................... 9
4.36 --help.................................................................................................................................................................. 9
4.37 --help-full ........................................................................................................................................................... 9
4.38 --help-html ....................................................................................................................................................... 10
4.39 --help-man ....................................................................................................................................................... 10
4.40 --version ........................................................................................................................................................... 10
5 生成器 ......................................................................................................................................................................... 10
6 命令 ............................................................................................................................................................................. 11
6.1 add_custom_command ................................................................................................................................... 11
6.2 add_custom_target ......................................................................................................................................... 12
6.3 add_definitions .................................................................................................................................................. 13
6.4 add_dependencies ............................................................................................................................................ 13
6.5 add_executable.................................................................................................................................................. 13
6.6 add_library ......................................................................................................................................................... 14
6.7 add_subdirectory ............................................................................................................................................... 14
6.8 add_test ............................................................................................................................................................. 15
6.9 aux_source_directory ........................................................................................................................................ 15
6.10 break ................................................................................................................................................................ 16
6.11 build_command ............................................................................................................................................... 16
6.12 cmake_minimum_required ............................................................................................................................. 16
6.13 cmake_policy ................................................................................................................................................... 16
6.14 confiure_file ..................................................................................................................................................... 17
6.15 create_test_sourcelist ..................................................................................................................................... 17
6.16 define_property ............................................................................................................................................... 18
6.17 else ................................................................................................................................................................... 18
6.18 elseif ................................................................................................................................................................ 19
6.19 enable_language ............................................................................................................................................. 19
6.20 enable_testing ................................................................................................................................................. 19
6.21 endforeach ....................................................................................................................................................... 19
6.22 endfunction ..................................................................................................................................................... 19
6.23 endif ................................................................................................................................................................. 19
6.24 endmacro ......................................................................................................................................................... 19
6.25 endwhile .......................................................................................................................................................... 20
6.26 execute_process .............................................................................................................................................. 20
6.27 export .............................................................................................................................................................. 20
6.28 file .................................................................................................................................................................... 21
6.29 find_file ............................................................................................................................................................ 22
6.30 find_library ...................................................................................................................................................... 24
6.31 find_package .................................................................................................................................................... 26
6.32 find_path ......................................................................................................................................................... 29
6.33 find_program ................................................................................................................................................... 31
6.34 fltk_wrap_ui ..................................................................................................................................................... 32
6.36 function............................................................................................................................................................ 33
6.37 get_cmake_property ....................................................................................................................................... 33
6.38 get_directory_property ................................................................................................................................... 33
6.39 get_filename_component ............................................................................................................................... 34
6.40 get_property .................................................................................................................................................... 34
6.41 get_source_file_property ................................................................................................................................ 35
6.42 get_target_property ........................................................................................................................................ 35
6.43 get_test_property ............................................................................................................................................ 35
6.44 if ....................................................................................................................................................................... 35
6.45 include ............................................................................................................................................................. 37
6.46 include_directories .......................................................................................................................................... 38
6.47 include_external_msproject ............................................................................................................................ 38
6.48 include_regular_expression ............................................................................................................................. 38
6.49 install ............................................................................................................................................................... 38
6.50 link_directories ................................................................................................................................................ 41
6.51 list .................................................................................................................................................................... 41
6.52 load_cache ....................................................................................................................................................... 42
6.53 load_command ................................................................................................................................................ 42
6.54 macro ............................................................................................................................................................... 43
6.55 mark_as_advanced .......................................................................................................................................... 43
6.56 math ................................................................................................................................................................. 43
6.57 message ........................................................................................................................................................... 43
6.58 option .............................................................................................................................................................. 44
6.59 output_required_files ...................................................................................................................................... 44
6.60 project .............................................................................................................................................................. 44
6.61 qt_wratp_cpp .................................................................................................................................................. 44
6.62 qt_wrap_ui ...................................................................................................................................................... 44
6.64 return ............................................................................................................................................................... 45
6.65 separate_arguments ........................................................................................................................................ 45
6.66 set .................................................................................................................................................................... 45
6.67 set_directory_properties ................................................................................................................................. 46
6.68 set_property .................................................................................................................................................... 46
6.69 set_source_files_properties ............................................................................................................................ 46
6.70 set_target_properties ...................................................................................................................................... 47
6.71 set_tests_properties ........................................................................................................................................ 48
6.72 site_name ........................................................................................................................................................ 48
6.73 source_group ................................................................................................................................................... 48
6.74 string ................................................................................................................................................................ 48
6.75 target_link_libraries ......................................................................................................................................... 49
6.76 try_compile ...................................................................................................................................................... 50
6.77 try_run ............................................................................................................................................................. 51
6.78 unset ................................................................................................................................................................ 51
6.79 variable_watch ................................................................................................................................................ 51
6.80 while ................................................................................................................................................................ 52
7 变量 ......................................................................................................................................................................... 52
7.1 提供信息的变量 .............................................................................................................................................. 52
8 实验指南 ..................................................................................................................................................................... 53
8.1 作为基础的起始点(步骤 1) ....................................................................................................................... 53
8.2 引入库(步骤 2) ............................................................................................................................................ 55
8.3 安装与测试(步骤 3) .................................................................................................................................... 56
8.4 增加系统内省(步骤 4) ............................................................................................................................... 57
8.5 添加一个生成文件以及生成器(步骤 5) ................................................................................................... 57
8.6 构建一个安装器(步骤 6) ........................................................................................................................... 60
8.7 增加对 Dashboard 的支持(步骤 7) ............................................................................................................. 61
转自[http://www.cnblogs.com/coderfenghc/tag/cmake/]
0 引言
公司的一个项目使用 CMake 作为跨平台构建工具;业务有需求,当然要好好研读一下官方的技术手册。目前的
计划是先把官方手册翻译一下,了解清楚 CMake 中的各种命令、属性和变量的用法。同时在工作中也会阅读 CMake
的真实源码,后续会基于此陆续写一些工程中使用 CMake 的心得。CMake 的版本也在不停更新,有些新的命令和变
量会随着版本更新添加进来,这是后事了,暂且不管;现在锁定 CMake 2.8.3 作为手册翻译的版本。
作为园子里的新丁,文章在术语和表达等等方面会有欠缺的地方,还请大侠们慷慨指点。另外,罗马不是一天
建成的,长长的手册翻译完也不知道要经历多少日升月落;不过还是希望自己能够坚持下去:-)。
1 命令名称
cmake - 跨平台 Makefile 生成工具。
2 用法
cmake [选项] <源码路径>
cmake [选项] <现有构建路径>
3 描述
cmake 可执行程序是 CMake 的命令行界面。它可以用脚本对工程进行配置。工程配置设置可以在命令行中使用
-D 选项指定。使用-i 选项,cmake 将通过提示交互式地完成该设置。
CMake 是一个跨平台的构建系统生成工具。它使用平台无关的 CMake 清单文件 CMakeLists.txt,指定工程的构
建过程;源码树的每个路径下都有这个文件。CMake 产生一个适用于具体平台的构建系统,用户使用这个系统构建
自己的工程。
4 选项
4.1 -C
-C : 预加载一个脚本填充缓存文件。
cmake 在一个空的构建树上第一次运行时,它会创建一个 CMakeCache.txt 文件,然后向其中写入可定制的项目
设置数据。-C 选项可以用来指定一个文件,在第一次解析这个工程的 cmake 清单文件时,从这个文件加载缓存的条
目(cache entries)信息。被加载的缓存条目比项目默认的值有更高的优先权。参数中给定的那个文件应该是一个
CMake 脚本,其中包含有使用 CACHE 选项的 SET 命令;而不是一个缓存格式的文件。
4.2 -D
-D :=: 创建一个 CMake 的缓存条目。
当 cmake 第一次运行于一个空的构建数时,它会创建一个 CMakeCache.txt 文件,并且使用可定制的工程
设置来填充这个文件。这个选项可以用来指定优先级高于工程的默认值的工程设置值。这个参数可以被重复多
次,用来填充所需要数量的缓存条目(cache entries)。
4.3 -U
-U : 从 CMake 的缓存文件中删除一条匹配的条目。
该选项可以用来删除 CMakeCache.txt 文件中的一或多个变量。文件名匹配表达式(globbing expression)支持
通配符*和?的使用。该选项可以重复多次以删除期望数量的缓存条目。使用它时要小心,你可能因此让自己的
CMakeCache.txt 罢工。
4.4 -G
-G : 指定一个 makefile 生成工具。
在具体的平台上,CMake 可以支持多个原生的构建系统。makefile 生成工具的职责是生成特定的构建系统。可
能的生成工具的名称将在生成工具一节给出。
-Wno-dev: 抑制开发者警告。
抑制那些为 CMakeLists.txt 文件的作者准备的警告信息。
-Wdev: 使能开发者警告信息输出功能。
允许那些为 CMakeLists.txt 文件的作者准备的警告信息。
4.5 -E
-E: CMake 命令行模式。
为了真正做到与平台无关,CMake 提供了一系列可以用于所有系统上的的命令。以-E 参数运行 CMake 会帮助
你 获得这些 命令的 用法。 可以使用 的命令 有: chdir, copy, copy_if_different copy_directory, compare_files, echo,
echo_append, environment, make_directory, md5sum, remove_directory, remove, tar, time, touch, touch_nocreate,
write_regv, delete_regv, comspec, create_symlink。
4.6 -i
-i: 以向导模式运行 CMake。
向导模式是在没有 GUI 时,交互式地运行 cmake 的模式。cmake 会弹出一系列的提示,要求用户回答关于工程
配置的一行问题。这些答复会被用来设置 cmake 的缓存值。
4.7 -L
-L[A][H]: 列出缓存的变量中的非高级的变量。
-L 选项会列出缓存变量会运行 CMake,并列出所有 CMake 的内有被标记为 INTERNAL 或者 ADVANCED 的缓存
变量。这会显示当前的 CMake 配置信息,然后你可以用-D 选项改变这些选项。修改一些变量可能会引起更多的变
量被创建出来。如果指定了 A 选项,那么命令也会显示高级变量。如果指定了 H 选项,那么命令会显示每个变量的
帮助信息。
4.8 --build
--build : 构建由 CMake 生成的工程的二进制树。(这个选项的含义我不是很清楚—译注)
该选项用以下的选项概括了内置构建工具的命令行界面
= 待创建的工程二进制路径。
4.9 --target
--target = 构建,而不是默认目标。
4.10 --config
--config = 对于多重配置工具,选择配置。
4.11 –clean-first
--clean-first = 首先构建目标的 clean 伪目标,然后再构建。
(如果仅仅要 clean 掉,使用--target 'clean'选项。)
4.12 -N
-N: 查看模式。
仅仅加载缓存信息,并不实际运行配置和生成步骤。
4.13 -P
-P : 处理脚本模式。
将给定的 cmake 文件按照 CMake 语言编写的脚本进行处理。不执行配置和生成步骤,不修改缓存信息。如果要
使用-D 选项定义变量,-D 选项必须在-P 选项之前。
4.14 –graphviz
--graphviz=[file]: 生成依赖的 graphviz 图。
生成一个 graphviz 软件的输入文件,其中包括了项目中所有库和可执行文件之间的依赖关系。
4.15 –system-information
--system-information [file]: 输出与该系统相关的信息。
输出范围比较广的、与当前使用的系统有关的信息。如果在一个 CMake 工程的二进制构建树的顶端运行该命令,它还会
打印一些附加信息,例如缓存,日志文件等等。
4.16 –debug-trycompile
--debug-trycompile: 不删除“尝试编译”路径。
不删除那些为 try_compile 调用生成的路径。这在调试失败的 try_compile 文件时比较有用。不过,因为上一次“尝试
编译”生成的旧的垃圾输出文件也许会导致一次不正确通过/不通过,且该结果与上次测试的结果不同,所以该选项可能
会改变“尝试编译”的结果。对于某一次“尝试编译”,该选项最好只用一次;并且仅仅在调试时使用。
4.17 --debug-output
--debug-output: 将 cmake 设置为调试模式。
在 cmake 运行时,打印额外的信息;比如使用 message(send_error)调用得到的栈跟踪信息。
4.18 --trace
--trace: 将 cmake 设置为跟踪模式。
用 message(send_error )调用,打印所有调用生成的跟踪信息,以及这些调用发生的位置。(这句话含义不是很
确定—译注。)
4.19 –help-command
--help-command cmd [file]: 打印单个命令 cmd 的帮助信息,然后退出。
显示给定的命令的完整的文档。如果指定了[file]参数,该文档会写入该文件,其输出格式由该文件的后缀名确定。
支持的文件类型有:man page,HTML,DocBook 以及纯文本。
4.20 –help-command-list
--help-command-list [file]: 列出所有可用命令的清单,然后退出。
该选项列出的信息含有所有命令的名字;其中,每个命令的帮助信息可以使用--help-command 选项后跟一个命
令名字得到。如果指定了[file]参数,帮助信息会写到 file 中,输出格式依赖于文件名后缀。支持的文件格式包括:
man page,HTML,DocBook 以及纯文本。
4.21 –help-commands
--help-commands [file]: 打印所有命令的帮助文件,然后退出。
显示所有当前版本的命令的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,输出格式依赖于文件名
后缀。支持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.22 –help-compatcommands
--help-compatcommands [file]: 打印兼容性命令(过时的命令—译注)的帮助信息。
显示所有关于兼容性命令的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,输出格式依赖于文件名
后缀。支持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.23--help-module
--help-module module [file]: 打印某单一模块的帮助信息,然后退出。
打印关于给定模块的完整信息。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。
支持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.24 --help-module-list
--help-module-list [file]: 列出所有可用模块名,然后退出。
列出的清单包括所有模块的名字;其中,每个模块的帮助信息可以使用--help-module 选项,后跟模块名的方式
得到。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。支持的文件格式包括:man
page,HTML,DocBook 以及纯文本。
4.25 --help-modules
--help-modules [file]: 打印所有模块的帮助信息,然后退出。
显示关于所有模块的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。支
持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.26 --help-custom-modules
--help-custom-modules [file]: 打印所有自定义模块名,然后退出。
显示所有自定义模块的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后
缀。支持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.27 --help-policy
--help-policy cmp [file]: 打印单个策略的帮助信息,然后退出。
显示给定的策略的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。
支持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.28 --help-policies
--help-policies [file]: 打印所有策略的帮助信息,然后退出。
显示所有策略的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。支
持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.29 --help-property
--help-property prop [file]: 打印单个属性的帮助信息,然后退出。
显示指定属性的完整文档。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。支
持的文件格式包括:man page,HTML,DocBook 以及纯文本。
4.30 --help-property-list
--help-property-list [file]: 列出所有可用的属性,然后退出。
该命令列出的清单包括所有属性的名字;其中,每个属性的帮助信息都可以通过--help-property 选项后跟一个
属性名的方式获得。如果指定了[file]参数,帮助信息会写到 file 中,且输出格式依赖于文件名后缀。支持的文件格
式包括:man page,HTML,DocBook 以及纯文本。