Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros CMake宏:如何迭代参数_Macros_Cmake_Arguments_Iteration - Fatal编程技术网

Macros CMake宏:如何迭代参数

Macros CMake宏:如何迭代参数,macros,cmake,arguments,iteration,Macros,Cmake,Arguments,Iteration,灵感来自: 我有: 其中打印: ARGN: test;1;2;3 但这之后什么都没有,这意味着ARGN上的迭代似乎没有发生 我遗漏了什么 对下列问题的答复: 显示如何将参数打印为列表,但不显示如何迭代参数。因此,在此上下文中,ARGN与其他列表不同。我认为有两种方法可以解决这个问题: 在我对你的样本进行的修改中,我制作了你的状态信息,以便于我的测试。这应该与警告一起工作 第一种方法是使其成为一个函数: function(ARGS_TEST_FUNCTION) message(STATU

灵感来自:

我有:

其中打印:

ARGN: test;1;2;3
但这之后什么都没有,这意味着ARGN上的迭代似乎没有发生

我遗漏了什么

对下列问题的答复:

显示如何将参数打印为列表,但不显示如何迭代参数。因此,在此上下文中,ARGN与其他列表不同。我认为有两种方法可以解决这个问题:

在我对你的样本进行的修改中,我制作了你的状态信息,以便于我的测试。这应该与警告一起工作

第一种方法是使其成为一个函数:

function(ARGS_TEST_FUNCTION)
  message(STATUS "\nARGN: ${ARGN}\n")
  foreach(arg IN LISTS ARGN)
     message(STATUS "\n ARG : ${arg} \n")
  endforeach()
endfunction()

ARGS_TEST_FUNCTION(test 1 2 3)
与此类似,ARGN是一个变量,并按预期进行了扩展。如果要在此循环中设置值,则需要使用set和PARENT_SCOPE。如果您正在调用其他宏,并且不知道它们要设置的每个变量,则可能无法使用父范围

或者,我们可以自己进行扩展,并告诉foreach我们正在传递一个列表:

macro(ARGS_TEST)
  message(STATUS "\nARGN: ${ARGN}\n")
  foreach(arg IN ITEMS ${ARGN})
     message(STATUS "\n ARG : ${arg} \n")
  endforeach()
endmacro()

ARGS_TEST(test 1 2 3)

这来自CMake文档中的

您错过了一件事,那就是在宏
ARGN
中。关于克服这个问题,请看这里:@Tsyvarev是的,但我遵循文档中的示例--;关于可能的重复,它似乎没有回答我的问题,它将列表强制转换为字符串,而不允许对其进行迭代(或者我无法理解答案?
我正在按照文档中的示例进行操作
——如果您谈到上一个示例,它在函数中使用宏调用。在这种情况下,宏从函数中获取ARGN变量。仔细阅读。但是你的案子的副本是错的,对不起。
macro(ARGS_TEST)
  message(STATUS "\nARGN: ${ARGN}\n")
  foreach(arg IN ITEMS ${ARGN})
     message(STATUS "\n ARG : ${arg} \n")
  endforeach()
endmacro()

ARGS_TEST(test 1 2 3)