我正在尝试从教程中学习 CMake 。我不太清楚这个set
功能是如何工作的。
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
Run Code Online (Sandbox Code Playgroud)
根据CMake文档:
Run Code Online (Sandbox Code Playgroud)set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
如果在这种特定情况下变量是EXTRA_LIBS
,值是${EXTRA_LIBS}
,那么CACHE
是MathFunctions
?
正确的?
该命令试图执行的操作是将字符串附加 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
。
归档时间: |
|
查看次数: |
6559 次 |
最近记录: |