2013-06-18 42 views
4

我很高興能夠分享一個Makefile和shell腳本之間的相同文件,因爲這樣的事實,他們都可以用下面的語法鍵值對應對:如何在CMake中以「bar = foo」語法加載變量?

$> cat config 
    var1=value 
    var2=value 
    var3=value 
    var4=value 
    var5=value 

所以,只是一個source config從shell腳本將是好的,以及從Makefileinclude config。但是,對於CMake,語法變爲SET(var1 value)。是否有一些簡單的方法可以使用上面的語法爲變量文件提供CMake?我的意思很簡單,我不喜歡跑sed在上面。

回答

11

@ Guillaume的答案非常適合從CMakeLists.txt中生成配置文件。

但是,如果你正在尋找導入配置文件的內容,這樣你CMake的環境中,你需要添加類似:

file(STRINGS <path to config file> ConfigContents) 
foreach(NameAndValue ${ConfigContents}) 
    # Strip leading spaces 
    string(REGEX REPLACE "^[ ]+" "" NameAndValue ${NameAndValue}) 
    # Find variable name 
    string(REGEX MATCH "^[^=]+" Name ${NameAndValue}) 
    # Find the value 
    string(REPLACE "${Name}=" "" Value ${NameAndValue}) 
    # Set the variable 
    set(${Name} "${Value}") 
endforeach() 
+0

我喜歡這種方法。這並不是很容易,但它並不需要依賴,比如我現在使用的「sed」。我只是沒有想到在cmake本身使用正則表達式! –

+0

看起來我應該學會閱讀:) – Guillaume

+0

呃...在一個地方同時有兩個答案是很好的。它具有對稱性:) – Fraser

相關問題