2017-12-02 255 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