【问题标题】:CMake multiple-option settingCMake 多选项设置
【发布时间】:2017-12-02 18:37:18
【问题描述】:

我正在开发一个使用 CMake 构建的项目,因此我正在为它写一个 CMakeLists.txt。在这个文件中,我想要一个(缓存的)CMake 变量,它只能采用几个选项之一(我会以某种方式指定),而不是任何任意字符串。为简单起见,我们将其视为一个字符串,可以是“red”、“green”或“blue”——除此之外别无其他。

除了设置任意字符串然后检查其有效性之外,我可以使用最近的 CMake 版本来实现这一点吗?

【问题讨论】:

  • 您能否详细说明您正在尝试做什么?您是否正在交付启用 CMake 的项目并希望限制 option() 的值可能在 cmake-gui 中可选?您是否正在编写 CMake 帮助器/包装器函数并且想要限制传递参数的值?您是否试图阻止 set() 调用某个变量以获取除预定义的一组值之外的任何其他值?
  • @Florian:见编辑。而且,是的,我希望在运行 ccmake(或 cmake-gui)时出现类似列表的内容。

标签: build cmake multiple-choice multiplechoicefield


【解决方案1】:

答案可以在 Kitware 的一篇名为 "Constraining Values with ComboBoxes in CMake (cmake-gui)" 的博文中找到:

下面是它的工作原理:对于您想要限制为一组值的每个缓存条目,像往常一样将其定义为默认值作为STRING 缓存变量,例如:

set(BaseName "binary" CACHE STRING "BaseName chosen by the user at CMake configure time")

现在,在使用初始默认值定义缓存条目后,定义其值应被约束的字符串集:

set_property(CACHE BaseName PROPERTY STRINGS binary octal decimal hexadecimal)

在 set_property 调用之后,cmake-gui 知道要呈现一个用于编辑“BaseName”缓存条目的下拉组合框,并且它知道它应该呈现的该条目的四个有效选择是binary,@ 987654326@、decimalhexadecimal

【讨论】:

  • 有没有办法提供空字符串作为选项?
猜你喜欢
  • 1970-01-01
  • 2018-03-16
  • 2012-04-22
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多