cmake常用命令

1.命令

命令不区分大小写(参数会区分大小写),命令由命令、参数列表组成,参数之间使用空格进行分隔。

使用一对双引号包括的字符串认为是一个参数。

命令可以是一个内置命令(例如:project,add_executable等),也可以是一个用户定义的宏(macro)或者函数(function)。

常用命令:

1.1 list

1.2 include

从文件或模块加载并运行CMake代码

1.3 option

CMake中的option用于控制编译流程,相当于C语言中的宏条件编译。options基本格式如下:

option(<variable> "<help_text>" [value])

variable:定义选项名称

help_text:说明选项的含义

value:定义选项默认状态,一般是OFF或者ON,除去ON之外,其他所有值都为认为是OFF。

1.4 message

message()函数用于想终端输出信息。

message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)

1.5 file

CMake中的file命令用于文件操作,比如读写文件,文件系统操作,路径转换,文件传输等,其文件格式如下:

子命令:读
  file(READ <filename> <out-var> [...])
  file(STRINGS <filename> <out-var> [...])
  file(<HASH> <filename> <out-var>)
  file(TIMESTAMP <filename> <out-var> [...])
  file(GET_RUNTIME_DEPENDENCIES [...])
 
子命令:写
  file({WRITE | APPEND} <filename> <content>...)
  file({TOUCH | TOUCH_NOCREATE} [<file>...])
  file(GENERATE OUTPUT <output-file> [...])
  file(CONFIGURE OUTPUT <output-file> CONTENT <content> [...])
 
子命令:文件系统
  file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])
  file(MAKE_DIRECTORY [<dir>...])
  file({REMOVE | REMOVE_RECURSE } [<files>...])
  file(RENAME <oldname> <newname> [...])
  file(COPY_FILE <oldname> <newname> [...])
  file({COPY | INSTALL} <file>... DESTINATION <dir> [...])
  file(SIZE <filename> <out-var>)
  file(READ_SYMLINK <linkname> <out-var>)
  file(CREATE_LINK <original> <linkname> [...])
  file(CHMOD <files>... <directories>... PERMISSIONS <permissions>... [...])
  file(CHMOD_RECURSE <files>... <directories>... PERMISSIONS <permissions>... [...])
 
子命令:路径转换
  file(REAL_PATH <path> <out-var> [BASE_DIRECTORY <dir>] [EXPAND_TILDE])
  file(RELATIVE_PATH <out-var> <directory> <file>)
  file({TO_CMAKE_PATH | TO_NATIVE_PATH} <path> <out-var>)
 
子命令:传输
  file(DOWNLOAD <url> [<file>] [...])
  file(UPLOAD <file> <url> [...])
 
子命令:锁
  file(LOCK <path> [...])
 
子命令:归档
  file(ARCHIVE_CREATE OUTPUT <archive> PATHS <paths>... [...])
  file(ARCHIVE_EXTRACT INPUT <archive> [...])
 

1.6 execute_process

执行一个或多个子进程,使用execute_process调用shell命令或脚本

2.数据类型

CMake的基本数据类型是字符串,一组字符串在一起称为列表(list)

# 通过 set 命令构建一个 listVAR
set(VAR a b c)

${VariableName}来访问名字为VariableName的变量的值。需要注意的是,即使在字符串中也可以使用${VariableName}来访问名字为VariableName的变量的值。需要注意的是,即使在字符串中也可以使用。

3.CMake中常用预定义变量

PROJECT_SOURCE_DIR:工程根目录

PROJECT_BINARY_DIR:运⾏cmake命令的⽬录。建议定义为${PROJECT_SOURCE_DIR}/build下

CMAKE_INCLUDE_PATH:环境变量

CMAKE_LIBRARY_PATH:环境变量

CMAKE_CURRENT_SOURCE_DIR:当前处理的CMakeLists.txt⽂件所在路径;

CMAKE_CURRENT_BINARY_DIR:target编译⽬录;

CMAKE_CURRENT_LIST_FILE:输出调⽤该变量的CMakeLists.txt的完整路径;

CMAKE_CURRENT_LIST_LINE:输出该变量所在的⾏;

CMAKE_MODULE_PATH:定义⾃⼰的cmake模块所在路径;

EXECUTABLE_OUTPUT_PATH:重新定义⽬标⼆进制可执⾏⽂件的存放位置;

LIBRARY_OUTPUT_PATH:重新定义⽬标链接库⽂件的存放位置;

PROJECT_NAME:返回由PROJECT指令定义的项⽬名称;

CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS:⽤来控制IF…ELSE…语句的书写⽅式;

开关选项变量:

BUILD_SHARED_LIBS 控制默认的库编译⽅式。注:如果未进⾏设置,使⽤ADD_LIBRARY时⼜没有指定库类型,默认编译⽣成的库都是静态库。

CMAKE_C_FLAGS 设置C编译选项

CMAKE_CXX_FLAGS 设置C++编译选项

4.CMake常用语法

cmake_minimum_required (VERSION 2.6)

project(WhiteBalance)

在外部构建⽅法下,PROJECT_SOURCE_DIR指向⽬录与内部构建相同,为CMakeLists.txt所在根⽬录;⽽PROJECT_BINARY_DIR不同,它指向CMakeLists.txt所在根⽬录下的build⽬录。

mkdir build
cd ./build
cmake ../
make

set (CMAKE_INSTALL_PREFIX /usr/local)

ADD_SUB_DIRECTORY

ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

这个指令⽤于向当前⼯程添加存放源⽂件的⼦⽬录,并可以指定中间⼆进制和⽬标⼆进制存放的位置。EXCLUDE_FROM_ALL 参数的含义是将这个⽬录从编译过程中排除。⽐如,⼯程有时候存在example,可能就需要⼯程构建完成后,再进⼊example⽬录单独进⾏构建。

5.常用函数

1.find_path 从默认⽬录和指定⽬录查找头⽂件,并返回结果

2.find_library 从默认⽬录和指定⽬录查找库⽂件,并返回结果

6.输出所有定义的变量

get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏克贝塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值