我想在编译nsis脚本时从文件(config.json)中读取一些值到某些变量中。 我怎么可能这样做?
提前致谢。
答案 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;`