cmake - CMake 设置变量
问题描述
在下面的 CMake 代码片段中,我对 if elseif 检查感到困惑。我的理解是 BL 永远是“Ei”,所以不需要检查其他值。是否有任何情况下 BL 可以被其他东西覆盖?我是 CMake 的新手,所以在这里需要一些帮助。
set(BL "Ei" CACHE STRING "library")
set_property(CACHE BL PROPERTY STRINGS "Ei;AT;Op")
message(STATUS "The backend of choice:" ${BL})
if(BL STREQUAL "Ei")
...
elseif(BL STREQUAL "AT")
...
elseif(BL STREQUAL "Op")
...
else()
message(FATAL_ERROR "Unrecognized option:" ${BL})
endif()
解决方案
该代码set(BL "Ei" CACHE STRING "library")
定义了一个 CMake 缓存变量。但是,如果语句中没有FORCE
选项set
,这意味着如果变量先前在缓存中定义,它将不会被覆盖。
用户设置不同值的一种方法BL
是在cmake
命令行上。例如:cmake ../sourcedir -DBL:STRING=AT
通过在缓存中输入变量作为 type STRING
(而不是 type INTERNAL
),这也使变量可用于配置 incmake-gui
或 in ccmake
。(此外,该set_property(... STRINGS ...)
指令告诉生成一个包含、和cmake-gui
的下拉列表并从中进行选择。但是,对于从命令行设置变量并没有强制执行此操作,这就是为什么使用默认情况仍然是一个好主意发出错误信号。)Ei
AT
Op
有关更多信息,请参阅CMake 文档set
下的“设置缓存条目”部分。
推荐阅读
- mysql - Multi conditional if statement in SQL query
- css - 在 bootstrap-vue 中更改下拉菜单的文本颜色
- javascript - 导出变量时如何解决“语法错误:导出声明只能出现在模块的顶层”?
- python - 减少由布尔运算符定义的嵌套字典
- r - 如何根据向量创建新的对象名称?
- c++ - SSE 整数 2 的 2^n 次方,用于不带 AVX2 的 32 位整数
- python - Python:if、elif、else。错误:SyntaxError:main.py 中第 6 行的错误输入
- windows - 组件的标准类别消失了
- python - pandas: sort by the order of appearance
- php - 使用链接中的所有表单信息将用户重定向到 PayPal 结帐页面是否安全?