NSIS:在编译时从文件中读取

时间:2013-03-20 07:11:25

标签: nsis compile-time

我想在编译nsis脚本时从文件(config.json)中读取一些值到某些变量中。 我怎么可能这样做?

提前致谢。

4 个答案:

答案 0 :(得分:5)

!include命令可以包含任何文件(在编译时),它位于nsis脚本中。但是包含的文件必须符合nsis语法(例如,它应该!define一些值。)

!execute命令可以帮助您:如果您需要绝对处理json文件,您可以编写第三方批处理命令文件来预处理json文件并将其转换为合适的nsis文件。 / p>

答案 1 :(得分:1)

您可以使用!define传递一些可在编译时使用的值。例如,假设您已在源代码文件中获得此代码:

!define PATHTOFILE "C:\thisfilewillbedeleted.ext"
Delete $PATHTOFILE

如果你想在编译时更改这个walue,可以用这种方式调用nsis:

makensis /DPATHTOFILE="C:\otherfiletodelete.ext"

<强> [编辑]

如果你有使用外部工具生成的* .json文件,你必须使用这种文件,我建议你使用一些建筑系统,例如ant。您可以创建读取的build.xml,从json文件解析数据,然后将这些数据写入*.nsh文件。我认为它比在nsis脚本中做得更好更干净。

答案 2 :(得分:1)

如果您只需要在运行时解析json文件,可以将!define/file选项一起使用:

!define /file OPTIONS json.txt

它将使用json.txt的内容定义OPTIONS。

如果你想在编译时利用你的json文件来改变生成的exe,那么你需要某种预编译器,这正是你实际所做的。

答案 3 :(得分:1)

您可以将!searchparse命令与/ file开关一起使用。

示例:

#search filename.cpp for a line&#39; #define APP_VERSION&#34; 2.5&#34;&#39;并将$ {VER_MAJOR}设置为2,将$ {VER_MINOR}设置为5。

!searchparse / file filename.cpp`#define APP_VERSION&#34;`VER_MAJOR` .` VER_MINOR`&#34;`