2014-11-04 12 views
0

我有一個應用程序,其版本號在C/C++頭文件被指定時,version.h如何從C++頭文件中將字符串提取到NSIS變量中?

#ifndef VERSION_H 
#define VERSION_H 

#define APPLICATION_VERSION "1.2.3" 

#endif 

版本號也是在NSIS腳本中指定,

!ifndef VERSION 
!define VERSION "1.2.3" 
!endif 

使得這個字符串可以包含在安裝程序的名稱中。有沒有辦法讓NSIS腳本直接從version.h中讀取這個值,這樣我只需要在一個地方指定版本號?

回答

1

使用!searchparse!searchreplace!define /math閱讀在編譯時/操控版本號:

!searchparse /file "c:\some\path\version.h" `#define APPLICATION_VERSION "` VERSION `"` 

下一個示例使用的是臨時文件,以便它可以在沒有外部的依賴關係進行測試:

!tempfile testhdr 
!appendfile "${testhdr}" "#ifndef VERSION_H$\n" 
!appendfile "${testhdr}" "#define VERSION_H$\n" 
!appendfile "${testhdr}" '#define APPLICATION_VERSION "1.2.3"$\n' 
!appendfile "${testhdr}" "#endif$\n" 

!searchparse /file "${testhdr}" `#define APPLICATION_VERSION "` VER_MAJOR `.` VER_MINOR `.` VER_BUILD `"` 
!searchparse /file "${testhdr}" `#define APPLICATION_VERSION "` VER_STRING `"` 

!delfile "${testhdr}" ; Cleanup 

!warning "${VER_MAJOR}, ${VER_MINOR}, ${VER_BUILD}" 
!error "${VER_STRING}" 

也可以使用既是有效的C也是NSIS代碼的定義來編寫標題:

#define /* 
!define /**/ \ 
FOO "Bar" 
+0

此代碼似乎創建了一個臨時文件...您能提供一個從現有文件中讀取文本的例子,就像我的問題一樣嗎? – bdesham 2014-11-05 13:26:55

+0

這只是爲了讓這個例子在沒有外部文件的機器上工作,只需用'!searchparse/file「c:\ foo \ bar \ version.h」'替換'!searchparse/file「$ {testhdr}刪除所有與testhdr相關的代碼... – Anders 2014-11-05 13:29:08

相關問題