2013-04-05 63 views
3

我添加了一個新的#DEFINE像這樣我的「的.pro」文件:如何在CMD命令輸出傳遞給#define宏在QMAKE

#DEFINE += SVN_V 

現在我想傳遞的輸出命令 「svnversion,如果-n」 這個SVN_V,這裏是我做過什麼:

#DEFINE += "SVN_V = svnversion -n" 

但結果是

error: no such file or directory

error: svnversion: no such file or directory

所以,我在這裏完全錯過了什麼? (請注意,我用Linux操作系統Ubuntu的工作)

回答

7

這可能是類似的東西:

DEFINES += "SVN_V=\"\\\"$$system(svnversion -n)\\\"\"" 

$$system()是qmake的函數來執行系統命令,並從中獲得輸出。

圍繞SVN_V的外部引用... - 對於qmake - 它必須明白這是一個單獨的定義。如果$$system()返回空格分隔字符串「未知版本」,您將得到結果:-DSVN="Unknown -Dversion"

Next quotes \" - 將$$system()結果傳給編譯器。沒有它,你會得到兩個參數,而不是一個"Unknownversion"

雙引號引號\\\"是將值傳遞給預處理器。如果沒有它,價值將被引用並被認爲是int。 \\\"將由qmake解析爲\"並傳遞給編譯器。

+0

非常感謝您的回覆。我嘗試了你的方式,cmd控制檯中的輸出是:(找不到文件「」的絕對位置),請注意我在我的qt #defines中正確輸出了svn版本。此外,我對使用美元符號感到困惑!!因爲我們已經使用'system()'函數指示了命令,爲什麼我們需要使用'$$'符號再次引用它。 – 2013-04-08 09:24:28

+0

認爲你的.pro文件有問題。簡單的.pro文件聲明TEMPLATE,SOURCES和DEFINES編譯就好,沒有任何警告。 '$$ system()'是一個qmake函數,所有的qmake函數都有'$$'前綴。請參閱qmake函數參考:http://qt-project.org/doc/qt-4.8/qmake-function-reference.html – loentar 2013-04-08 09:51:53

+0

我的.pro文件很好。不過,我認爲這只是指定我的svn的工作副本。現在,我只需要什麼qt給我......但我可以傳遞我的「SVN_V」的值作爲字符串(因爲我得到的價值,但有這樣一個字母「1.23M」。它給了我一個錯誤是:無效的整數常量「sufix」,這意味着它讀取我的SVN_V整數,但M字符串正在出現問題,所以,我該如何解決這個問題 – 2013-04-08 11:06:24

相關問題