CMake教程2:CMake语法-变量、流程控制、函数

简介: CMake教程2:CMake语法-变量、流程控制、函数

CMake使用CMakeLists.txt进行管理程序的编译链接过程,CMakeLists.txt拥有自己的语法。

注释

# 我是一行注释
复制代码

变量

语法格式: set(<varName> <varValue>)

注意:变量也有作用域的概念,更多的细节参考官方手册

  • 变量的定义和赋值
set(test "a") # test="a"
复制代码
  • list变量:使用空格分割
set(test "a" "b") # test="a b"
list(APPEND test "c") # test="a b c"
复制代码
  • 环境变量
# 定义环境变量
set(ENV{qt} ./user/bin/qt)
# 使用环境变量
message($ENV{qt})
复制代码
  • 引用变量:${varName}
set(test1 "a") # test1="a"
set(test2 ${test1}) # test2="a"
set(test3 ${test1}/main.cpp) # test3="a/main.cpp"
复制代码
  • 打印变量
message(${test})
复制代码
mode可选参数:
(无) = 重要消息;
STATUS = 非重要消息;
WARNING = CMake 警告, 会继续执行;
AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
FATAL_ERROR = CMake 错误, 终止所有处理过程;
复制代码
内置变量 说明
CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
CMAKE_CURRRENT_BINARY_DIR 工程的编译目录
如果是in-source编译,等价与CMAKE_CURRENT_SOURCE_DIR
如果是out-source编译,指的是所在的外部目录
CMAKE_CURRENT_LIST_DIR 当前文件夹路径
CMAKE_LIBRARY_OUTPUT_DIRECTORY (优先使用)
LIBRARY_OUTPUT_PATH (旧版本变量)
生成库文件的路径
CMAKE_RUNTIME_OUTPUT_DIRECTORY (优先使用)
EXECUTABLE_OUTPUT_PATH (旧版本变量)
生成可执行文件的路径

基本上掌握以上几个变量的含义,就能看懂大部分的CMake文件

流程控制

  • 条件语句
if(xx)
    # todo
else(xx)
    # todo
endif
if()
    # todo
elseif()
    # todo
endif
复制代码
  • 循环语句
foreach(xx list)
    message(${xx})
endforeach()
while()
    # todo
endwhile()
复制代码

foreach例子

set(myList a b c d e)
foreach(xx ${myList})
    message(${xx})
endforeach()
# 输出结果:a b c d e
复制代码

逻辑表达式书写例子:

set(test 100)
if(test EQUAL 100)
    # 成立
endif
复制代码

函数、过程

function()
    # todo
endfuntion()
marco()
endmarco()
复制代码

模块

CMAKE_MODULE_PATH模块查找路径

  • find_path(VAR_NAME includefile path1 path2 ...) 定义头文件目录 如果文件未找到,VAR_NAME会赋值为VARIABLE_NAME-NOTFOUND
  • find_library同理,寻找库文件

综合运用例子

  • 打印CMake的所有变量
get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
复制代码

所有的一切都是Command

如果你对CMake足够熟悉,其实上文中使用的set、message、list、if、foreach等都是cmake-command,CMake提供了非常多的Command,在后续会慢慢介绍。



目录
相关文章
|
7月前
|
存储 缓存 算法
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
214 0
|
存储 Shell 编译器
makefile 变量赋值方式
makefile 变量赋值方式
110 1
|
存储 Cloud Native Linux
CMake学习之内部变量
CMake学习之内部变量
|
4月前
|
存储 编译器 Shell
cmake基于语法和应用
cmake基于语法和应用
|
6月前
|
编译器 C语言
C语言编译详解:GCC分步编译与一次编译多个文件
C语言编译详解:GCC分步编译与一次编译多个文件
560 2
|
7月前
|
iOS开发 MacOS
CMake基础:CMake中的常用变量的命令
CMake基础:CMake中的常用变量的命令
79 0
|
Shell
makefile 变量的扩展
makefile 变量的扩展
56 1
|
缓存
关于CMake中不同变量的用法与总结
关于CMake中不同变量的用法与总结
176 0
【Python】变量作用域规则
【Python】变量作用域规则
|
Serverless Python
python小练习--基本结构与函数控制语句
python小练习--基本结构与函数控制语句
191 0
python小练习--基本结构与函数控制语句