CMake中的function类似编程语言的函数,允许我们将一系列复杂的命令封装起来,方便调用与重复使用。
其基本的语法如下:
function(<name> [<arg1> ...])
<commands>
endfunction([<name>])
<name>:表示定义的函数名,通过这个名字来调用整个函数,
[<arg1>…] 表示函数的参数,可以省略
<commands> 就是函数中的具体命令组合,这些命令组合可以使用传进来的参数。
endfunction()表示整个函数以及定义完成,其中括号里可填,可不填,如果要填的话,其名字必须与function中定义的函数名一致。
下面定义了一个最简单的function:
function(my_function)
message(STATUS "print my function")
endfunction()
我们调用这个函数,看看结果:
my_function()
结果为:
print my function
cartographer_detailed_comments_ws-master\src\cartographer\cmake\functions.cmake
macro(_parse_arguments ARGS)
set(OPTIONS)
set(ONE_VALUE_ARG)
set(MULTI_VALUE_ARGS SRCS)
cmake_parse_arguments(ARG
"${OPTIONS}" "${ONE_VALUE_ARG}" "${MULTI_VALUE_ARGS}" ${ARGS})
endmacro(_parse_arguments)
。。。
# 生成可执行文件
function(google_binary NAME)
_parse_arguments("${ARGN}")
add_executable(${NAME} ${ARG_SRCS})
以下面为例
# 生成建图节点
google_binary(cartographer_node
SRCS
node_main.cc
)
cartographer_node 是这里的参数 NAME,可执行文件add_executable(${NAME} ${ARG_SRCS}),会以 cartographer_node为可执行文件名,
调用上面的宏进行解析 ARG_SRCS->node_main.cc .
${ARG_SRCS} 即 MULTI_VALUE_ARGS 即 ARG_SRCS-》 node_main.cc
最后 即 add_executable(${NAME} ${ARG_SRCS}) -> add_executable (cartographer_node node_main.cc)
待写。。。。