CMake 简单使用
CMake 简单使用
命令行
1 | 生成构建系统 |
-D <var>:<type>=<value>
设定变量-G <generator-name>
指定生成器--graphviz=[file]
生成依赖图-A <platform-name>
指定平台
1 | 构建一个项目 |
CMakeLists.txt
1 | . |
1 | cmake_minimum_required(VERSION 3.10) |
- 变量使用
${...}
访问
基本命令
命令存在作用域,一般会以前缀方式表示,尽量避免全局函数
定义变量与属性
注意:变量是存在作用域的
- 定义变量
1 | set(<variable> <value>... [PARENT_SCOPE]) |
- 定义布尔变量
1 | option(<variable> "<help_text>" [value]) |
- 定义对象属性
1 | set_property(<GLOBAL | |
file
- 将
<globbing-expr>
匹配内容列表存储到<variable>
中
1 | file(GLOB <variable> |
CONFIGURE_DEPENDS
会使编译工具在构建时重新读取variable
项目命令
只能在 CMake 项目内使用
project
- 定义项目名及属性
1 | project(<PROJECT-NAME> [<language-name>...]) |
定义二进制目标(target)
-
可执行文件
1
2
3add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])source
应包含头文件
-
库
1
2
3add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[<source>...])
target_*
e.g:
-
target_include_directories()
:指定目标包含的头文件路径 -
target_link_libraries()
:指定目标链接的库 -
target_compile_options()
:指定目标的编译选项
以
1 | target_include_directories(<target> |
为例:
-
target
为add_library
或add_executable
创建 -
PRIVATE
:私有,item
仅对本级c
文件可用,上级不可用 -
INTERFACE
:接口,item
对本级h
文件可用,上级可用 -
PUBLIC
:公有,等于前二者并集
变量
变量一般是全局的、cmake 预设或者用户定义的
-
ENV{NAME}
: 环境变量,可set
值 -
CMAKE_BUILD_TYPE
:目标构建类型 -
CMAKE_SYSTEM_NAME
:目标系统 -
CMAKE_SYSTEM_PROCESSOR
目标构架 -
CMAKE_<LANG>_COMPILER
指定语言编译器 -
CMAKE_C_COMPILER_TARGET
对支持指定编译目标的系统传入目标 -
CMAKE_BINARY_DIR
、PROJECT_BINARY_DIR
、<projectname>_BINARY_DIR
:工程编译发生的目录 -
CMAKE_SOURCE_DIR
、PROJECT_SOURCE_DIR
、<projectname>_SOURCE_DIR
: 工程顶层目录 -
CMAKE_CURRENT_SOURCE_DIR
: 当前处理的 CMakeLists.txt 所在路径 -
CMAKE_SYSTEM
:系统名称,比如 Linux-2.6.22 -
CMAKE_SYSTEM_NAME
: 不包含版本的系统名,比如 Linux -
CMAKE_SYSTEM_VERSION
: 系统版本,比如 2.6.22 -
CMAKE_SYSTEM_PROCESSOR
: 处理器名称,比如 i686.
属性
GLOBAL
、DIRECTORY
、TARGET
等对象的属性
TARGET
-
LIBRARY_OUTPUT_DIRECTORY
库输出路径 -
LIBRARY_OUTPUT_NAME
库名称 -
RUNTIME_OUTPUT_DIRECTORY
最终二进制可执行文件输出目录 -
RUNTIME_NAME_DIRECTORY
可执行文件名称 -
C_STANDARD
C 语言标准 -
CXX_STANDARD
C++语言标准