如何从Ant'exec'任务导出环境变量?

时间:2009-11-23 14:57:45

标签: ant environment-variables exec devenv

我在WinXp下使用Ant来构建MSVisual c ++项目。

要访问“devenv.com”,与计算机无关,我想使用vsvars32.bat脚本。 不幸的是,似乎环境变量仅在“exec”范围内定义。

示例:

<exec executable='"${env.VS90COMNTOOLS}vsvars32.bat/>
<echo message="${DevEnvDir}" />
<echo message="${env.DevEnvDir}" />
<property environment="env2"/>
<echo message="${env2.DevEnvDir}" />

我从未得到预期的结果。

如何使用“vsvars32.bat”脚本并访问其env。瓦尔? 是否有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:4)

不是直接调用vsvars32.bat,而是使用小帮助程序脚本调用它,该脚本使用set将环境设置写入文件。

帮助程序脚本vsenvwrap.bat

@echo off

call "%VS90COMNTOOLS%\vsvars32.bat"

set > vsenv.txt

build.xml调用帮助程序脚本,然后阅读设置文件vsenv.bat

<exec executable="vsenvwrap.bat" />
<property file="vsenv.txt" prefix="env2" />

然后,您可以在构建期间或干净的目标中删除vsenv.txt文件。

这使用环境变量列表大多符合java属性文件所需格式的事实。

答案 1 :(得分:2)

您可以创建一个运行您的ant脚本的小型批处理文件,并在该批处理文件中执行vsvars32.bat,然后再调用ant。

@echo off

setlocal

set TEMP_HOME=%~dp0

call "%VS90COMNTOOLS%\vsvars32.bat"

call "%ANT_HOME%\bin\ant.bat" %*

endlocal