我有一个针对不同目标平台和主机平台运行的构建环境,使用ant来完成主要工作。 对于一个目标平台(Qualcomm的BREW MP,本机C / C ++),我需要使用这个ant目标执行编译:
<target name="build.brew.target" if="${cfg.build.brew}" depends="brew.clean">
<exec dir="${src.cpp.brew}/brew" executable="cs-make" failonerror="true" newenvironment="false">
<env key="PATH" value="${env.PATH}" />
<arg line="-f brew.mak" />
</exec>
...
</target>
cs-make是来自BREW SDK的make实用程序,它运行makefile(brew.mak)中定义的构建。
从cmd提示符(Win7 / 64)执行时,ant返回错误,比如说
ant build.brew.target
ant打印出cl.exe(Visual Studio 2010 Express的一部分)报告的错误:
[exec] "C:/PROGRA~1/Qualcomm/BREWMP~1/TOOLSE~1.246/bin/cifc.exe" -bar Win32_Debug/../res/brew.bar -IC:\Dev\lib\cpp\libspeex\include -I. -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/inc -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/../inc -I../inc -I../../common -IC:\Dev\ignore\BOOST_~1 -IWin32_Debug ../res/brew.car
[exec] "C:/PROGRA~1/Qualcomm/BREWMP~1/TOOLSE~1.246/bin/cifc.exe" -bar Win32_Debug/../res/brew.bar -IC:\Dev\lib\cpp\libspeex\include -I. -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/inc -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/../inc -I../inc -I../../common -IC:\Dev\ignore\BOOST_~1 -IWin32_Debug -M ../res/brew.car > Win32_Debug/../res/brew.bar.dep
[exec] if exist Win32_Debug/../res/brew.bar (copy /b /v Win32_Debug\..\res\brew.bar +,,Win32_Debug\..\res\brew.bar>nul) else (echo on>Win32_Debug/../res/brew.bar)
[exec] "C:/PROGRA~1/Qualcomm/BREWMP~1/TOOLSE~1.246/bin/cifc.exe" -IC:\Dev\lib\cpp\libspeex\include -I. -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/inc -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/../inc -I../inc -I../../common -IC:\Dev\ignore\BOOST_~1 -IWin32_Debug ../res/brew.cif -pre Win32_Debug/brew.clif -M > Win32_Debug/brew.clif.dep
[exec] "C:/PROGRA~1/Qualcomm/BREWMP~1/TOOLSE~1.246/bin/cifc.exe" -IC:\Dev\lib\cpp\libspeex\include -I. -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/inc -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/../inc -I../inc -I../../common -IC:\Dev\ignore\BOOST_~1 -IWin32_Debug ../res/brew.cif -pre Win32_Debug/brew.clif
[exec] "C:/PROGRA~1/Qualcomm/BREWMP~1/TOOLSE~1.246/bin/cifc.exe" -mod brew -mif Win32_Debug/brew.mif Win32_Debug/brew.clif
[exec] cs-make: *** [Win32_Debug/AEEAppGen.o] Error -1073741515
[exec] "c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC//bin/cl.exe" -nologo -D_WIN32_WINNT=0x0400 -MTd -Z7 -EHsc -GS -Zl -RTC1 -Od -Ob1 -W3 -WX -wd4244 -wd4146 -wd4005 -wd4355 -c -DAEE_SIMULATOR -D_DEBUG -D_DEBUG -DAEE_SIMULATOR -IC:\Dev\lib\cpp\libspeex\include -I. -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/inc -IC:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/../inc -I../inc -I../../common -IC:\Dev\ignore\BOOST_~1 -IWin32_Debug -I"c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC//Include" -I"c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC//PlatformSDK/Include" -FoWin32_Debug/AEEAppGen.o C:/PROGRA~1/Qualcomm/BrewMPSDK/Platforms/BREW4/sdk/src/AEEAppGen.c
BUILD FAILED
C:\Dev\brew.xml:27: The following error occurred while executing this line:
C:\Dev\brew.xml:43: exec returned: 2
我找不到有关错误-1073741515的任何内容,所以我不知道有什么问题。但是:如果我运行相同的命令(在与之前的蚂蚁呼叫相同的cmd窗口中),一切正常。
cs-make -f brew.mak
我的第一个想法是 - 并且保持最好的选择 - 它必须与我的环境有关。为此,我将newenvironment="false"
添加到我的exec行。没有成功。
任何提示都会受到欢迎......
答案 0 :(得分:0)
这是一个工作太晚的问题。我第一次遇到这个错误后,我认为它必须是%PATH%或其他环境变量。所以我添加了这一行:
<env key="PATH" value="${env.PATH}" />
我从项目的其他地方复制了这个,但是没有交叉检查,如果它对我的环境保持正确的%PATH%。
由于它不起作用,我用Google搜索并找到了exec目标的参数newenvironment="false"
并添加了它 - 但由于目标中的上述行未保存正确的env.PATH值,因此出错了。 />
这对我有用:
<target name="build.brew.target" if="${cfg.build.brew}" depends="brew.clean">
<exec dir="${src.cpp.brew}/brew" executable="cs-make" failonerror="true" newenvironment="false">
<arg line="-f brew.mak" />
</exec>
...
</target>