2015-06-19 92 views
1

我正在嘗試使用CMake通過令牌替換將通用包裝轉換爲特定包裝。我希望所有用戶都必須做的是輸入一組特定的字符串,讓CMake執行configure_file,並且包裝器會讀取值並按預期​​工作。CMake用戶字符串輸入

我知道的可能使用集來設置需要更換令牌:

set(FAV_FOOD "Sushi" CACHE STRING "What is your favorite food?") 

還有選項,讓用戶從一組像這樣的答案選擇:

set(MY_SELECTION "Option A" CACHE STRING "Help message for this variable") 
set_property(
    CACHE MY_SELECTION 
    PROPERTY STRINGS 
    "Option A" "Option B" "Option C" 
) 

問題在於我無法枚舉所有有效的答案。 CMake有沒有辦法讓GUI彈出並允許用戶用任何字符串回答?在調用make之前,我可以讓用戶在文件中填寫這些值,但是我想避免用戶手動執行任何操作,並且我想提前使用CMake緩存並避免假定用戶已經填寫了文件中的變量。

任何建議將是最有幫助的。謝謝。

回答

2

您的第一個示例是向CMake提供用戶指定選項的標準方法,通常包括一些合適的默認值,就像您已經演示的一樣。

您可以省略默認值(傳遞空字符串),然後檢查是否已指定該值,以便在用戶嘗試配置時生成錯誤。

爲了自動提供這些值,用戶可以特定在命令行上使用-D =語法:

cmake -DSOME_VAR=some_val <path_to_CMakeLists.txt> 

我通常使用的cmake/ccmake,我假定使用的是Windows cmake的貴,這與ccmake非常相似。我知道沒有辦法使用cmake-gui彈出一些額外的窗口。但是,似乎可以用上述選項as described here來調用cmake-gui。使用這種方法,您可以提供用戶可以編輯的.bat文件,以便輸入您希望他們指定的設置。

在我看來,只要你已經讓他們運行cmake-gui,那麼簡單地使用你的第一個建議的解決方案,讓他們改變gui中的值「老式的方式」確實是最合適的選項。

+0

我認爲我將要使用的策略是使用Matlab來做一個簡單的GUI,並將用戶的答案保存在cmake腳本中,並使用-C選項將腳本加載到預構建緩存中當調用cmake時。你在命令行傳遞值的方法可以工作,但由於我的情況下有大量變量,所以很麻煩。 –