如何从C ++头文件中提取字符串到NSIS变量?

时间:2014-11-04 20:46:08

标签: nsis

我有一个应用程序,其版本号在C / C ++头文件version.h中指定:

#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 个答案:

答案 0 :(得分: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"