2017-12-02 213 views
1

我正在使用CMake构建的项目,所以我正在为它编写一个CMakeLists.txt。在这个文件中,我想要一个(缓存的)CMake变量,它只能使用几个选项中的一个(我将以某种方式指定),而不是任何任意字符串。为了简单起见,我们假设它是一个可以采用“红色”,“绿色”或“蓝色”的字符串 - 但没有别的。CMake多选项设置

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

+0

您能否介绍一下您正在尝试做的事情?你是否提供了一个CMake启用的项目,并想限制'option()'的值可能在'cmake-gui'中选择?你正在编写一个CMake帮助程序/包装函数,并且你想限制传递参数的值吗?你是否试图阻止对某个变量的'set()'调用来获得任何其他的预定义的值? – Florian

+0

@弗洛里安:见编辑。而且,是的,当我运行ccmake(或cmake-gui)时,我希望列表出现在列表中。 – einpoklum

回答

2

答案是在一个名为"Constraining Values with ComboBoxes in CMake (cmake-gui)" Kitware的博客文章的一个被发现:

因此,这里的工作原理是:为要​​限制在一定值的集合,其定义为通常每个高速缓存条目具有默认值作为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的桂知道要呈现下拉组合框中编辑了“名前缀”缓存条目,它知道这个记录的四个有效的选择,它应该呈现为binaryoctal,decimalhexadecimal