我有一个现有的Ant脚本,它调用MakeNSIS并成功创建一个安装程序文件。我希望在Ant中更改输出路径,然后传递给NSIS。目前,我试过用这种方式调用NSIS:
<exec executable="${nsis_exe.dir}/makensis.exe">
<arg value="${installer.dir}/installer.nsi" />
<arg value="/DTEST=myvalue"/>
<arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
</exec>
但是我无法在nsi文件中检索此值。我无法使用this解决方案,因为我想在File命令中使用该参数,该参数需要符号而不是变量才能正常工作。
我在我的nsi文件中使用以下内容:
DetailPrint ${TEST}
DetailPrint ${DTEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
我收到的错误是:
[exec] warning: unknown variable/constant "{TEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:184)
[exec] DetailPrint: "${TEST}"
[exec] warning: unknown variable/constant "{DTEST}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:185)
[exec] DetailPrint: "${DTEST}"
[exec] warning: unknown variable/constant "{BUILD_VERSION_LABEL}" detected, ignoring (../Solution/third_party/NSIS_Build/dtu_installer.nsi:186)
[exec] DetailPrint: "${BUILD_VERSION_LABEL}"
[exec] File: Returning to: "C:\DTU\Build\${BUILD_VERSION_LABEL}"
[exec] File: "C:\DTU\Build\${BUILD_VERSION_LABEL}\*" -> no files found.
我可以使用哪些想法或我做错了什么?
答案 0 :(得分:1)
我遇到的问题是我的论点顺序。我的ANT脚本中有以下内容:
<exec executable="${nsis_exe.dir}/makensis.exe">
<arg value="${installer.dir}/installer.nsi" />
<arg value="/DTEST=myvalue"/>
<arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
</exec>
但显然我不能用这种方式在nsi文件中看到/ D参数。如果我更改它,那么nsi文件是最后一个参数,它可以工作:
<exec executable="${nsis_exe.dir}/makensis.exe">
<arg value="/DTEST=myvalue"/>
<arg value="/DBUILD_VERSION_LABEL=${build.version.label}"/>
<arg value="${installer.dir}/installer.nsi" />
</exec>
然后我可以像以前一样访问nsi文件中的参数:
DetailPrint ${TEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
答案 1 :(得分:0)
Ant属性在build.xml
文件之外不起作用。如果您希望在nsi
文件中使用这些值,则可以创建模板文件,然后在使用nsi
和<filterset/>
实体时将该模板文件复制到<filter/>
。这将使用您指定的值替换参数:
DetailPrint @TEST@
DetailPrint @DTEST@
DetailPrint @BUILD_VERSION_LABEL@
File /r "C:\DTU\Build\@BUILD_VERSION_LABEL@\*"
然后复制nsi
模板,如下所示:
<copy file="${NSI.TEMPLATE.DIR}/${NSI.TEMPLATE.FILE}"
tofile="${NSI.DIR}/${NSI.FILE}">
<filterset>
<filter token="TEST" value="${TEST}"/>
<filter token="DTEST" value="${DTEST}"/>
<filter token="BUILD_VERSION_LABEL" value="${BUILD_VERSION_LABEL}"/>
</filterset>
</copy>
现在,您可以使用新复制的nsi
文件执行命令。确保您已定义各种Ant属性,例如${TEST}
和${DTEST}
。
您可以使用<concat/>
来构建文件。它可能更容易,因为您不需要先创建模板,然后使用<filterset>
复制模板:
<target name="build.nsi.file">
<concat destfile="${NSI.file}">DetailPrint ${TEST}
DetailPrint ${DTEST}
DetailPrint ${BUILD_VERSION_LABEL}
File /r "C:\DTU\Build\${BUILD_VERSION_LABEL}\*"
</concat>
</target>