简单介绍一下 cmake 使用方法(3) function

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

之前我们已经用过 message 输出在 cmake 编译时输出的信息,下面我们来输出一下项目的名称,项目名称存储在在变量 PROJECT_NAME 我们可以 ${} 来提取变量值。

message("${PROJECT_NAME}")
复制代码

这样就会输出存储项目名称的变量的值,然后 ${变量} 会提取变量的值,如果变量不存在,这回输出空字符串。

message("project name = ${PROJECT_NAME}")
复制代码

但是这样做还不够泛化,我们可以定义函数 print 来对变量名称进行输出。

接下来用 function 指令定义一个函数,第一参数函数名称,第二参数是参数

function(print var)
    message("${var} = ${${var}}")
endfunction()

print(PROJECT_NAME)
复制代码

这里对 ${var} 进行解析得到是我们传入的变量名,所以第一个输出 ${var} 输出为 PROJECT_NAME 接下来在对 PROJECT_NAME 变量进行取值所以 ${${var}}

我们也可以在 function 指令定义函数时候,仅给出函数名称,而无需给出参数名称,接下来可以通过一些内置变量(参数)来获取输入函数的一个或者多个参数。

参数名称 说明
ARGN 获取参数列表
ARGC 获取参数数量
ARGV 获取参数值
PROJECT_NAME;MyVAR
复制代码
set(MyVAR "hello world")

function(print)
    message("${ARGN}")
endfunction()

print(PROJECT_NAME MyVAR)

复制代码
set(MyVAR "hello world")

function(print)
    message("${ARGN}")
    message("${ARGC}")
    message("${ARGV0}")
endfunction()

print(PROJECT_NAME MyVAR)
复制代码

PROJECT_NAME 是一个 cmake 的自有的变量和一个自定义的 MyVAR 并且赋值为 "hello world" 。定义函数时候我们这是并没有定义任何变量作为形参,因为在 cmake 中对于函数这里提供一些内置变量让我们通过这些变量可以访问到用户输入变量,这样好处就是变量数量是可变,在调用函数时我们传入两个变量。

PROJECT_NAME;MyVAR
2
PROJECT_NAME
复制代码

ARGN 是一个变量名称集合,ARGC 变量值是输入变量的个数,ARGV持有给函数的所有参数的列表

set(MyVAR "hello world")

function(print)
    message("${ARGN}")
    message("${ARGC}")
    foreach(var ${ARGN})
        message("${ARGV}==${${var}}")    
    endforeach()
endfunction()

print(PROJECT_NAME MyVAR)
复制代码

我们可以用 foreach 语句来遍历 ARGN

猜你喜欢

转载自juejin.im/post/7085237413227790366