我正在尝试从a tutorial学习CMake 。我不太清楚这个 set
函数是如何工作的。
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
根据CMake文档:
set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
如果在此特定情况下变量为 EXTRA_LIBS
,值为 ${EXTRA_LIBS}
,则 CACHE
为 MathFunctions
>?
正确吗?
最佳答案
该命令尝试执行的操作是将字符串附加到 EXTRA_LIBS
中已存储的任何值。 MathFunctions
。 p>
分解:
set(VARNAME VALUE)
将变量VARNAME
设置为字符串VALUE
。请注意,您可以将多个值分配给单个变量,这将有效地分配 a list value到变量:
set(VARNAME VALUE1 VALUE2 VALUE3)
要稍后访问该变量的值,您有 to dereference it using ${}
,如
message(${VARNAME})
如果分配的值是一个列表,您可能需要access the different elements separately相反:
foreach(element ${VARNAME})
message(${element})
endforeach()
您问题中的命令在一行中取消引用旧值并分配新值。
the list
command 提供了执行相同作业的更具描述性的方法。 :
list(APPEND EXTRA_LIBS MathFunctions)
相关说明:请注意,附加到列表和字符串连接之间存在细微差别:
set (EXTRA_LIBS "${EXTRA_LIBS} MathFunctions")
此命令不是追加,而是为变量分配一个新的单一字符串值,该值等于先前值与字符串 MathFunctions
的串联。
关于CMake设置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407689/