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_STANDARDC 语言标准 -
CXX_STANDARDC++语言标准