CMake基本语法

2023-11-05

操作数

* 类型

分类

BOOL STRING PATH FILEPATH - 配置变量类型

LIST

转换

推导

* 具名

  声明周期:set 声明,${具名},unset取消

# 定义一个变量 判断是否定义用DEFINED
set(<变量名> <变量值>)
# 引用一个变量
${变量名}
# 取消一个变量
unset(<变量名>)

内部变量:

  • CMAKE_COMMAND

  系统环境变量  $ENV{<环境变量名>}

  工程源目录和bin目录

  • PROJECT_SOURCE_DIR                          顶级CMakeLists所在目录
  • PROJECT_BINARY_DIR                            cmake生成目录
  • CMAKE_CURRENT_SOURCE_DIR          CMakeLists所在目录
  • CMAKE_CURRENT_BINARY_DIR            工程文件所在目录
  • CMAKE_CURRENT_LIST_FILE                引用这个变量所在文件的全路径
  • CMAKE_CURRENT_LIST_DIR                 引用这个变量所在文件的全目录
  • CMAKE_CURRENT_LIST_LINE               引用这个变量所在文件行号
  • CMAKE_INSTALL_PREFIX                      安装目录前缀

  工程自身变量

  • PROJECT_NAME
  • <PROJECT-NAME>_VERSION
  • <PROJECT-NAME>_VERSION_MAJOR

  符号文件、静态库、动态库和运行输出目录变量

  • CMAKE_PDB_OUTPUT_DIRECTORY
  • CMAKE_PDB_OUTPUT_DIRECTORY_<CONFIG>
  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY
  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
  • CMAKE_RUNTIME_OUTPUT_DIRECTORY
  • CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>

   区别系统

  • CMAKE_HOST_WIN32
  • CMAKE_HOST_UNIX(注意macos也属于unix)
  • CMAKE_HOST_APPLE
  • CMAKE_SYSTEM_NAME
  • CMAKE_HOST_SYSTEM_PROCESSOR (uname -p 或%PROCESSOR_ARCHITECTURE%)

   配置

  • CMAKE_CONFIGURATION_TYPES                  多配置的Generator才存在,(Debug、Release...)
  • CMAKE_BUILD_TYPE

  编译器   

  • XCODE_VERSION
  • MSVC_VERSION                                                1800表示Visual Studio 2013
  • MSVC
  • CMAKE_C_COMPILER                                      mac: xcrun -find cc
  • CMAKE_CXX_COMPILER                                 mac: xcrun -find c++

  编译参数

  • CMAKE_C_FLAGS
  • CMAKE_CXX_FLAGS
  • CMAKE_CXX_STANDARD           指定c++标准,可设置为11

  链接参数 

  • CMAKE_SHARED_LINKER_FLAGS    指定链接库空格间隔,
  • CMAKE_EXE_LINKER_FLAGS

  配置

  • CMAKE_<CONFIG>_POSTFIX          指定目标名称后缀,比如set(CMAKE_DEBUG_POSTFIX "d")

  其他

  • BUILD_SHARED_LIBS                指定生成动态库开关,默认为on
  • CMAKE_<CONFIG>_POSTFIX   指定生成配置文件后缀,比如DEBUG的库带d

常量 

真:1 ON YES TRUE Y

假:0 OFF NO FALSE N IGNORE NOTFOUND

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE")

运算符

  • EQUAL   LESS   GREATER   STREQUAL   STRLESS   STRGREATER
  • VERSION_EQUAL   VERSION_LESS   VERSION_GREATER
  • MATCHES         正则匹配
  • NOT  AND   OR
  • EXISTS   IS_DIRECTORY 
  • COMMAND   判断函数或者宏是否可以触发
  • TARGET        判断目标是否存在
  • DEFINED      判断是否 set,直接变量名
  • IN_LIST

流程控制

分支控制

# 单分支
if()
  set()
endif()
# 双分支
if()
  set()
else()
  set()
endif()
# 多分支
if()
  set()
elseif()
  set()
else()
  set()
endif()

循环控制

# 列表遍历
# 第一种表达
foreach(<item> IN LISTS <item_list>)
    message("")
endforeach()
# 第二种表达
foreach(<item> ${<item_list>})
    message("")
endforeach()

# 遍历多项
foreach(item item1 item2 item3})
    message("${item}")
endforeach()

# 循环n次
foreach(loop_var RANGE num)
endforeach()
foreach(loop_var RANGE 0 num 1)
endforeach()

函数

基本形式

function(<函数名> <变量名> ...)

endfunction()

函数类型

调用方式

string(TOUPPER ...)

string(APPEND ...)

string(REGEX MATCH ...)

list(APPEND ...)

标准函数

message                            打印消息

add_subdirectory               包含子CMakeLists.txt目录

include                                包含其他*.cmake文件

include_directories             头文件包含目录

link_directories                   库链接目录

target_link_libraries            添加链接库

add_definitions                   添加编译参数或宏

add_dependencies             为target指定依赖的target

add_executable                  添加可执行程序target

add_library                         添加静态库或者动态库target

add_compile_definitions

add_compile_options

add_link_options

target_compile_definitions 为目标添加编译参数或宏

target_compile_options

target_link_options

target_include_directories 为目标添加包含目录

target_link_directories

target_link_libraries

ExternalProject_Add          添加一个外部target,多用于安装,更新等

get_cmake_property          获取cmake工程的所有变量,包括自定义和自带变量

source_group                    为IDE工程设置分组,VS相当于筛选器

find_path                           从默认目录和指定目录查找头文件,并返回结果

find_library                        从默认目录和指定目录查找库文件,并返回结果

find_package(name)         从CMAKE_MODULE_PATH目录中查找Find<name>.cmake 模块,并放入工程中使用

file                                     读写文件创建删除文件,重新命名文件等等

语法概念

target

cmake认为一个执行体、一个库或者自定义的target为一个target,通过add_executable,add_library,add_custom_target、ExternalProject_Add来增加target,简单来说通过这三个函数添加的,就是一个target,可通过if(TARGET target-name)来判断

command

简单来讲就是宏和函数,通过if(COMMAND command-name)来判断

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake基本语法 的相关文章

随机推荐

  • 有关CSS3 3D盒子模型的一些总结

    以前就想学CSS3动画 觉得挺高级的 但后来因为一些原因 没能理解好 也没有时间 最近重新学了一波 为了帮助那些像我一样理解能力不太好的人 同时也使自己更好的理解知识点 这里做一下总结 主要是我在学习过程中遇到的一些问题 如果有写的不清晰的
  • 安防天下5、6——视频编码器技术DVS、网络录像机(NVR)技术

    视频编码器技术DVS DVS Digital vedio server 的出现 标志着视频监控系统进入了网络时代 编码器的主要功能是编码压缩及网络传输 适合应用再监控点比较分散的应用环境中 但从本质上讲 DVS还不是纯粹的网络监控设备 因为
  • Linux常用命令大全(详细版)

    目录 1 Linux管理文件和目录的命令 2 有关磁盘空间的命令 3 文件备份和压缩命令 4 有关关机和查看系统信息的命令 5 管理使用者和设立权限的命令 6 线上查询的命令 7 文件阅读的命令 8 网络操作命令 9 其他命令 详细版本 1
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全

    Bean public ColorFactoryBean colorFactoryBean return new ColorFactoryBean 创建一个spring定义的FactoryBean public class ColorFac
  • 原生js实现导航栏拖拽滑动(适用于pc端和手机端)

    先贴一张动图看看效果吧 下面把代码贴上注释都在代码边上
  • 【PyTorch】torch.utils.data.Dataset 介绍与实战

    文章目录 一 前言 二 torch utils data Dataset 是什么 1 干什么用的 2 长什么样子 三 通过继承 torch utils data Dataset 定义自己的数据集类 四 为什么要定义自己的数据集类 五 实战
  • 什么是多态?如何实现?只看这一篇就够了

    1 多态的概念 1 1 概念 多态的概念 通俗来说 就是多种形态 具体点就是去完成某个行为 当不同的对象去完成时会产生出不同的状态 2 多态的定义及实现 2 1多态的构成条件 多态是在不同继承关系的类对象 去调用同一函数 产生了不同的行为
  • 在任务管理器结束某些任务后电脑突然白屏

    1 问题描述 任务管理器 可以通过单击右键电脑底部任务栏找到 快捷键 ctrl shfit esc 一般我们可以在 任务管理器 中强制结束一些任务 尤其是电脑特别卡的时候 但是 有时候一不留神 不知道结束了什么任务 电脑突然就白屏了 2 解
  • 【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

    文章目录 一 题目 二 解法 三 完整代码 所有的LeetCode题解索引 可以看这篇文章 算法和数据结构 LeetCode题解 一 题目 二 解法 思路分析 二叉搜索树的性质是左子树的所有节点键值小于中间节点键值 右子树的所有节点键值大于
  • C语言快速入门(2)

    目录 1 常量 1 1字面常量 1 2const修饰的常变量 1 3 define定义的标识符常量 1 4枚举常量 2 字符串和转义字符 2 1字符串 2 2转义字符 3 注释 4 选择语句 5 循环语句 6 函数 7 数组 7 1数组的定
  • css实现单行,多行文本超出文本显示省略号

    1 单行文本 div width 100px 必须要设置 overflow hidden 超出部分隐藏 white space nowrap 禁止换行 强制文本在一行显示 text overflow ellipsis 溢出文本显示省略号 使
  • to load JavaHL Library解决方法

    解决方法 Window Preferences Team SVN 在SVN接口的下拉框可以看到 默认选择的是JavaHL JNI Not Available 手动更改为SVNKit Pure Java SVNKit v1 3 5 7406
  • msys2安装与配置: 在windows上使用linux工具链g++和包管理工具pacman C++开发

    文章目录 为什么用这个msys2 下载 doc 安装 很简单 初次运行 做些配置 更新 软件安装与卸载方法 安装必要的软件包 设置win环境变量 在windows terminal中使用 在vscode中使用 为什么用这个msys2 方便w
  • OSPF详解及简单配置

    动态路由协议 直连路由器之间构建邻居关系 通过收发各类数据包进行共享信息 来获取未知的路由信息 基于某种算法自动生成未知网段最优路径的解 将其加载在路由表中 判断一个网络协议的好坏 通常关注三方面 收敛速度快 占用资源少 选路佳 各类协议的
  • Aspose最新版22.8教程

    直接上代码 用vs开发工具写一段代码 word转pdf new Document this txtWordFile Text Save new pdf new PdfSaveOptions 编译 生成exe 打开dnspy 将生成的exe和
  • 王姓名字大全

    土 王 士 王 健 王雯新 王美玲 王 振 王诗雅 王博岩 王 一 王德丹 王竣臣 王资存 王 一 王宇陈 王 颖 王淑华 王骏臣 王阳菲 王孜臣 王 三 王 婷 王 樱 王 莉 王鹏哲 王玺毓 王新华 王 任 王之惠 王韬涵 王添乐 王孝
  • 超详细前端面试八股文

    今天在掘金看到一篇特别好的前端八股文 链接 连八股文都不懂还指望在前端混下去么 掘金
  • Vue结合路由配置递归实现菜单栏

    转载 https www cnblogs com HouJiao p 13139901 html 完整代码在码云 https gitee com zhuxueling router menu git 在日常开发中 项目中的菜单栏都是已经实现
  • java与数据库连接odbc_详解java数据库连接之JDBC-ODBC桥连方式

    java数据库连接方式有两种 其中JDBC ODBC桥连方式属于之一 JDBC ODBC桥连方式连接数据库适用于JDK1 8之前的JDK版本 具体的连接过程详见下文 详析JDBC ODBC桥连方式 JDK提供JDBC接口 JDBC是一种可以
  • CMake基本语法

    操作数 类型 分类 BOOL STRING PATH FILEPATH 配置变量类型 LIST 转换 推导 具名 声明周期 set 声明 具名 unset取消 定义一个变量 判断是否定义用DEFINED set lt 变量名 gt lt 变