在CMake中,可以使用foreach命令来实现参数的迭代。 以下是一个示例的CMake宏,用于迭代参数并打印每个参数的值: 代码语言:txt 复制 # 定义一个迭代参数的宏 macro(iterate_params) # 使用foreach命令遍历参数列表 foreach(param ${ARGN}) # 打印每个参数的值 message("Parameter: ${param}") endforeach() ...
message(STATUS "this is in macro 3 ${arg}") endforeach() foreach(arg IN LISTS list_var) message(STATUS "this is in macro 4 ${arg}") endforeach() endmacro(_bar) message(STATUS "\n") _bar(a b c) function(_func) message(STATUS "this is in func __func " ${ARGN}) set(aa...
此外,有关${ARGN}的意义,也请大家回顾一下之前的内容,它的作用是排列所有“隐式输入”的参数,例如: INCLUDE_FOR_PROJECT( VersionLib HELLO OSG ) 复制代码 这一函数调用传入的实际参数,${PROJNAME}对应“VersionLib”,而${ARGN}对应“HELLO;OSG”这个字符串数组。 FOREACH命令将依次取出HELLO和OSG字符串,并赋...
除了while()循环结构外,还有一个相对更加常用和简介的循环结构块:foreach()。上文中while()循环块是需要具体的、额外的<condition> 表达式来控制需要执行的命令语言,而foreach()循环则是类似C/C++的for循环风格来控制的,只是foreach块的打开和关闭指令分别是foreach() 和endforeach(),其定义如下所示: 代码语言:...
上文中提到foreach()是相对while()而言,在CMake中更加常用和简介的循环结构块,这个是因为foreach()在处理列表变量时十分便捷: 1、foreach(<loop_variable>IN[LISTS<lists>][ITEMS<items>]) CMake 将从所有提供的<lists> 列表变量中获取元素,也就是输入循环中的list可以是多个,然后再是从所有显式声明的<items...
endforeach() set(outvaroutvar{result}) endmacro() sum(addResult 1 2 3 4 5) message("Result is :${addResult}") 上面是一段求和宏定义,我们来解读一下代码:"${ARGN}"是CMake中的一个变量,指代宏中传入的多余参数。因为我们这个宏sum中只定义了一个 参数"outvar",其余需要求和的数字都是不定形...
foreach(file_source IN ITEMS ${ARGN}) add_source_group(${file_source}) endforeach() endfunction(file_source_group) set(DEMO_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/include/hello.hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/hello.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/123/test.h ...
宏的ARGN、ARGV等内部变量不能直接在if语句和foreach(..IN LISTS..)语句中使用。其它一样 示例如下: macro(_bar) message(STATUS "this is in macro bar " ${ARGN}) set(aa ${ARGV0}) if(ARGV0) message(STATUS "this is in a 1") endif() ...
沒有未剖析或未使用的自變數。 請檢查ARGN或arg_UNPARSED_ARGUMENTS。FATAL_ERROR可能的話,WARNING如果需要進行回溯相容性。 所有cmake_parse_arguments都必須使用PARSE_ARGV。 所有foreach循環都必須使用IN LISTS、IN ITEMS或RANGE。 變數${ARGV}和${ARGN}是未推斷的,除了對用戶的實用訊息以外。
CMake中使用`ARGN`关键字表示变长参数列表。例如: ``` function(print_arbitrary_args arg) message("arg=${arg}") foreach(arg IN LISTS ARGN) message(" ${arg}") endforeach() message("end of args") endfunction() print_arbitrary_args("hello" "world" "again") ``` 输出结果为: ``` ...