CMake设置函数

标签 cmake set

我正在尝试从a tutorial学习CMake 。我不太清楚这个 set 函数是如何工作的。

set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)

根据CMake文档:

set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])

如果在此特定情况下变量为 EXTRA_LIBS,值为 ${EXTRA_LIBS},则 CACHEMathFunctions >?

正确吗?

最佳答案

该命令尝试执行的操作是将字符串附加到 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/

相关文章:

cmake - 在 CMake 中使用空字符串设置缓存变量有什么意义?

c++ - CMake CUDA 在 Windows 上单独编译静态库链接错误,但在 Ubuntu 上没有

macos - 是否有将 linux 构建转换为 mac 构建的通用策略?

c++ - C++ `unordered_set` 中两个 "not working"的交集在类方法中但可与 `set` 一起使用?

cmake - 如何使用cmake获得彩色输出?

android - 如何在 QtCreator 项目树(CMake-项目)中显示额外文件?

c++ - 从两个不同的字段中排序并确定唯一性的容器

c++ - std::set 的重载运算符 < 让我很困惑

performance - 计算子集的唯一交集

c++ - 如何仅使用对中的第一个元素在集合中找到对?