CMake多选项设置

20
我正在处理一个使用CMake构建的项目,因此我正在为它编写一个 CMakeLists.txt。在这个文件中,我想要有一个(缓存的)CMake变量,它只能取几个选项中的一个(我会以某种方式指定),而不能是任意字符串。为了简单起见,我们假设它是一个字符串,可以取 "red"、"green" 或 "blue" 中的一个,但不能是其他任何值。
除了设置任意字符串然后检查它是否有效之外,我能否在最近的 CMake 版本中实现这一点?

1
请问您能否提供更多关于您正在尝试做什么的细节?您是在交付一个启用了CMake的项目,并希望限制option()中可能可选的值,以便在cmake-gui中选择吗?您是否正在编写一个CMake助手/包装函数,并希望限制传递参数的值?您是在尝试防止对某个变量进行set()调用,以获得除预定义的一组值之外的任何其他值吗? - Florian
@Florian: 请看编辑。是的,我想要在运行ccmake(或cmake-gui)时出现类似列表的东西。 - einpoklum
1个回答

25

答案可以在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"缓存条目,并知道应该呈现的此条目的四个有效选择是binaryoctaldecimalhexadecimal


1
有没有一种方法可以提供空字符串作为选项? - Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接