0%

CMake语法主要框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# ---------- 主要使用方式 ----------
command(arg1 arg2 ...) # 运行命令
set(var_name var_value) # 定义变量,或者赋值
command(arg1 ${var_name}) # 使用变量
# ---------- 工程配置部分 ----------
cmake_minimum_required(VERSION num) # CMake最低版本号要求
project(cur_project_name) # 项目信息
set(CMAKE_CXX_FLAGS "XXX") # 设定编译器版本,如-std=c++11
set(CMAKE_BUILD_TYPE "XXX") # 设定编译模式,如Debug/Release
# ---------- 依赖执行部分 ----------
find_package(std_lib_name VERSION REQUIRED) # 引入外部依赖
add_library(<name> [STATIC|SHARED|MODULE] source1) # 生成库烈性(动态,静态)
include_directories(${std_lib_name_INCLUDE_DIRS}) # 指定头文件include路径,相当于gcc的-l
link_directories(${std_lib_name_INCLUDE_DIRS}) # 指定动态链接库或静态链接库的路径,相当于gcc的-L
add_executable(cur_project_name XXX.cpp) # 指定生成目标
target_link_libraries(${std_lib_name_LIBRARIES}) # 指定libraries路径,放在add_executable
# ---------- 其他辅助部分 ----------
function(function_name arg) # 定义一个函数
add_subdirectory(dir) # 添加一个子目录
AUS_SOURCE_DIRECTORY(. SRC_LIST) # 查找当前目录所有文件,保存到SRC_LIST变量中
FOREACH(one_dir ${SRC_LIST})
MESSAGE(${one_dir}) # 使用message进行打印
ENDFOREACH(onedir)
# ---------- 判断控制部分 ----------
if(expression)
COMMAND1(ARGS)
ELSE(expression)
COMMAND2(ARGS)
ENDIF(expression)
# expression
IF(var)
IF(NOT var)
IF(var1 AND var2)
IF(var1 OR var2)
IF(COMMAND cmd)
IF(EXISTS dir)
IF(EXISTS file)
IF(IS_DIRECTORY dirname)
IF(file1 IS_NEWER_THAN file2)
IF(variable MATCHES regex)
# range
WHILE(condition)
COMMAND1(ARGS)
// ...
ENDWHILE(condition)
# ---------- CMake基本常用指令 ----------
ADD_DEFINITIONS # 为源文件的编译添加由-D引入的宏定义,如add_definitions(-DWin32)
OPTION # 提供可以选择的选项,格式为:option(variable "description" initial_value)
ADD_CUSTOM_COMMAND/TARGET
# [COMMAND]:为工程添加自定义的构建规则
# [TARGET]:给指定名称的目标指定执行的命令,目标没有输出文件,并始终被构建
ADD_DEPENDENCIES # 添加依赖
INSTALL # 用于定义安装规则,安装内容包括目标二进制、动态库、静态库以及文件、目录、脚本
TARGET_INCLUDE_DIRECTORIES # target_include_directories(<target>[SYSTEM][BEFORE]<INTERFACE|PUBLIC|PRIVATE>[items])
SET_TARGET_PROPERTIES # 设置目标oad属性来改变它们构建的方式
ENABLE_TESTING/ADD_TEST
# [enable_testing]:控制Makefile是否构建test目标
# [add_test]:一般和enable_testing配合使用
# 格式ADD_TEST(testname Exename arg1 arg2 ...),生成后make test测试
# ---------- CMake基本常用变量 ----------
CMAKE_INSTALL_PREFIX # 构建install的路径
$ENV{HOME} # HOME环境下的目录路径
PROJECT_NAME # 工程名变量
<PKG>_INCUDE_DIR # 导入包头文件全路径
<PKG>_LIBRARIES # 导入库文件的权路径
PROJECT_SOURCE_DIR # 构建工程的全路径
CMAKE_VERSION # Cmake版本号
CMAKE_SOURCE_DIR # 源码树顶层路径
1
message([SEND_ERROR|STATUS|FATAL_ERROR] "message")