CMake设置函数

use*_*083 2 set cmake

我正在尝试从教程中学习 CMake 。我不太清楚这个set功能是如何工作的。

set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
Run Code Online (Sandbox Code Playgroud)

根据CMake文档:

set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
Run Code Online (Sandbox Code Playgroud)

如果在这种特定情况下变量是EXTRA_LIBS,值是${EXTRA_LIBS},那么CACHEMathFunctions

正确的?

Com*_*sMS 5

该命令试图执行的操作是将字符串附加 MathFunctions到已存储在变量中的任何值EXTRA_LIBS

分解它:

set(VARNAME VALUE)
Run Code Online (Sandbox Code Playgroud)

将变量设置VARNAME为字符串VALUE。请注意,您可以将多个值分配给单个变量,这将有效地将列表值分配给该变量:

set(VARNAME VALUE1 VALUE2 VALUE3)
Run Code Online (Sandbox Code Playgroud)

要稍后访问该变量的值,您必须使用 取消引用它${},如下所示

 message(${VARNAME})
Run Code Online (Sandbox Code Playgroud)

如果分配的值是一个列表,您可能希望分别访问不同的元素

 foreach(element ${VARNAME})
      message(${element})
 endforeach()
Run Code Online (Sandbox Code Playgroud)

您问题中的命令在一行中既取消引用旧值又分配新值。

list命令提供了执行相同分配的更具描述性的方法:

list(APPEND EXTRA_LIBS MathFunctions)
Run Code Online (Sandbox Code Playgroud)

相关说明:请注意,附加到列表和字符串连接之间存在细微的区别:

set (EXTRA_LIBS "${EXTRA_LIBS} MathFunctions")
Run Code Online (Sandbox Code Playgroud)

该命令不是追加,而是为变量分配一个新的单数字符串值,该值等于先前值与字符串的串联MathFunctions