我正在阅读一个教程,其中包含以下构建中的 ant 脚本.xml
<project name="calculator4" default="generate" basedir=".">
<property name="src" location="src" />
<property name="gen" location="gen" />
<property name="src" location="src" />
<property name="package" value="calculator4" />
<target name="generate">
<mkdir dir="${gen}/${package}" />
<java classname="org.antlr.v4.Tool" classpathref="classpath" fork="true">
<arg value="-o" />
<arg path="${gen}/${package}" />
<arg value="-lib" />
<arg path="${src}/${package}" />
<arg value="-listener" />
<arg value="${src}/${package}/Calculator.g4" />
</java>
</target>
由于我对 ant 了解不多,也不想使用它,所以我尝试将命令翻译为 bash 像这样
java org.antlr.v4.Tool -o gen/calculator4 -lib src/calculator4 -listener src/calculator4/Calculator.g4
但这是错误的,因为它在 gen/calculator4/src/calculator4 中生成文件,就像在 gen/calculator4 中生成文件的正确行为一样
除了直接替换之外,${} 还有什么特别之处吗?
生成的文件的相对路径与输入文件的相对路径匹配。由于您指定src/calculator4/Calculator.g4
作为输入文件,因此输出文件将src/calculator4/*.java
。
- 更改目录,使工作目录与
Calculator.g4
所在的文件夹相同。 - 删除
-lib src/calculator4
参数。 - 将
-o
参数更改为-o ../../gen/calculator4
。 - 仅传递
Calculator.g4
作为命令的最后一个参数。