2012-04-10 52 views
0

我正在嘗試編譯Audacity 2.0.0並收到以下錯誤。我是C/C++的新手,所以不確定如何排除故障。我正在使用VS 2010 Professional SP1。錯誤編譯Audacity MSB4023項目元數據不能應用於MSVC 2010

錯誤449錯誤MSB4023:無法評估項目元數據「%(Extension)」。項目元數據「%(Extension)」不能應用於路徑「」C:\ audacity-src-2.0.0 \ win \ Debug \ Audacity.vcxproj \ analyze.ny「」。路徑中的非法字符。 C:\ audacity-src-2.0.0 \ win \ ny.targets 65 6 Audacity

這是我的ny.targets文件。我做了一些谷歌搜索,但到目前爲止它已經沒有結果。

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <PropertyPageSchema 
     Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" /> 
    <AvailableItemName 
     Include="copy"> 
     <Targets>_copy</Targets> 
    </AvailableItemName> 
    </ItemGroup> 
    <UsingTask 
    TaskName="copy" 
    TaskFactory="XamlTaskFactory" 
    AssemblyName="Microsoft.Build.Tasks.v4.0"> 
    <Task>$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml</Task> 
    </UsingTask> 
    <Target 
    Name="_copy" 
    BeforeTargets="$(copyBeforeTargets)" 
    AfterTargets="$(copyAfterTargets)" 
    Condition="'@(copy)' != ''" 
    DependsOnTargets="$(copyDependsOn);ComputecopyOutput" 
    Outputs="@(copy-&gt;'%(Outputs)')" 
    Inputs="@(copy);%(copy.AdditionalDependencies);$(MSBuildProjectFile)"> 
    <ItemGroup 
     Condition="'@(SelectedFiles)' != ''"> 
     <copy 
     Remove="@(copy)" 
     Condition="'%(Identity)' != '@(SelectedFiles)'" /> 
    </ItemGroup> 
    <ItemGroup> 
     <copy_tlog 
     Include="%(copy.Outputs)" 
     Condition="'%(copy.Outputs)' != '' and '%(copy.ExcludedFromBuild)' != 'true'"> 
     <Source>@(copy, '|')</Source> 
     </copy_tlog> 
    </ItemGroup> 
    <Message 
     Importance="High" 
     Text="%(copy.ExecutionDescription)" /> 
    <WriteLinesToFile 
     Condition="'@(copy_tlog)' != '' and '%(copy_tlog.ExcludedFromBuild)' != 'true'" 
     File="$(IntDir)$(ProjectName).write.1.tlog" 
     Lines="^%(copy_tlog.Source);@(copy_tlog-&gt;'%(Fullpath)')" /> 
    <copy 
     Condition="'@(copy)' != '' and '%(copy.ExcludedFromBuild)' != 'true'" 
     CommandLineTemplate="%(copy.CommandLineTemplate)" 
     OutputName="%(copy.OutputName)" 
     AdditionalOptions="%(copy.AdditionalOptions)" 
     Inputs="@(copy)" /> 
    </Target> 
    <PropertyGroup> 
    <ComputeLinkInputsTargets> 
     $(ComputeLinkInputsTargets); 
     ComputecopyOutput; 
    </ComputeLinkInputsTargets> 
    <ComputeLibInputsTargets> 
     $(ComputeLibInputsTargets); 
     ComputecopyOutput; 
    </ComputeLibInputsTargets> 
    </PropertyGroup> 
    <Target 
    Name="ComputecopyOutput" 
    Condition="'@(copy)' != ''"> 
    <ItemGroup> 
     <copyDirsToMake 
     Condition="'@(copy)' != '' and '%(copy.ExcludedFromBuild)' != 'true'" 
     Include="%(copy.Outputs)" /> 
     <Link 
     Include="%(copyDirsToMake.Identity)" 
     Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> 
     <Lib 
     Include="%(copyDirsToMake.Identity)" 
     Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> 
     <ImpLib 
     Include="%(copyDirsToMake.Identity)" 
     Condition="'%(Extension)'=='.obj' or '%(Extension)'=='.res' or '%(Extension)'=='.rsc' or '%(Extension)'=='.lib'" /> 
    </ItemGroup> 
    <MakeDir 
     Directories="@(copyDirsToMake-&gt;'%(RootDir)%(Directory)')" /> 
    </Target> 
</Project> 

回答

1

雖然我沒有找出錯誤的根源,但我找到了解決方法。

解決方法是不要使用VS2010編譯Audacity。

使用VS2008 —它的工作馬上蝙蝠與2008年

此鏈接,http://wiki.audacityteam.org/wiki/Developing_On_Windows#What_about_Visual_Studio_2010.3F__Or_64-bit.3F,給出了詳細的說明。

VC++ 2008 Express與2010並排安裝,沒問題。

這裏是他們正試圖把它與2010年的工作線程,http://forum.audacityteam.org/viewtopic.php?f=19&t=61946

4

爲了記錄在案,你的問題是由引號引起的。

轉到:

""C:\audacity-src-2.0.0\win\Debug\Audacity.vcxproj\analyze.ny"" 

進入

"C:\audacity-src-2.0.0\win\Debug\Audacity.vcxproj\analyze.ny" 

如何你做到這一點,將取決於你是如何傳遞的輸入。

1

在VS2010中編譯來自Sourceforge的當前代碼的技巧是修改ny.props文件,並在portaudio-v19和portmixer的Pre-Build和Post-Build步驟中擴展變量。在目前的解決方案中,我似乎無法獲得VS2010中的環境變量,如下所示。擴大它們似乎超過了這一點。但是,像SDK目錄環境變量這樣的預先聲明的變量可以正常工作。

此外,ny.props文件中引號的單個修復程序將在稍後修復所有級聯。這似乎是讓它正確編譯的最小修復程序。

修復的方法是如下:

ny.props原:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup 
    Condition="'$(copyBeforeTargets)' == '' and '$(copyAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'"> 
    <copyBeforeTargets>Midl</copyBeforeTargets> 
    <copyAfterTargets>CustomBuild</copyAfterTargets> 
    </PropertyGroup> 
    <PropertyGroup> 
    <copyDependsOn 
     Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(copyDependsOn)</copyDependsOn> 
    </PropertyGroup> 
    <ItemDefinitionGroup> 
    <copy> 
     <OutputName>"$(OutDir)$(ProjectFileName)\%(Filename)%(Extension)"</OutputName> 
     <CommandLineTemplate>copy /Y [inputs] %(OutputName)</CommandLineTemplate> 
     <Outputs>%(OutputName)</Outputs> 
     <ExecutionDescription>Copying %(Filename)</ExecutionDescription> 
    </copy> 
    </ItemDefinitionGroup> 
</Project> 

ny的關係。道具修復:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup 
    Condition="'$(copyBeforeTargets)' == '' and '$(copyAfterTargets)' == '' and '$(ConfigurationType)' != 'Makefile'"> 
    <copyBeforeTargets>Midl</copyBeforeTargets> 
    <copyAfterTargets>CustomBuild</copyAfterTargets> 
    </PropertyGroup> 
    <PropertyGroup> 
    <copyDependsOn 
     Condition="'$(ConfigurationType)' != 'Makefile'">_SelectedFiles;$(copyDependsOn)</copyDependsOn> 
    </PropertyGroup> 
    <ItemDefinitionGroup> 
    <copy> 
     <OutputName>$(OutDir)$(ProjectFileName)\%(Filename)%(Extension)</OutputName> 
     <CommandLineTemplate>copy /Y [inputs] "%(OutputName)"</CommandLineTemplate> 
     <Outputs>%(OutputName)</Outputs> 
     <ExecutionDescription>Copying %(Filename)</ExecutionDescription> 
    </copy> 
    </ItemDefinitionGroup> 
</Project> 

portaudio-V19預編譯原文:

echo on 
set CFG="$(ProjectDir)/$(Configuration)/config.h" 

echo // Automatically generated file >%CFG% 
IF NOT "%DXSDK_DIR%" == "" echo #define PA_USE_DS 1 >>%CFG% 
IF NOT "%ASIOSDK_DIR%" == "" echo #define PA_USE_ASIO 1 >>%CFG% 
IF NOT "%JACKSDK_DIR%" == "" echo #define PA_USE_JACK 1 >>%CFG% 
IF NOT "%JACKSDK_DIR%" == "" echo #define PA_DYNAMIC_JACK 1 >>%CFG% 
rem echo #define PA_USE_WDMKS 1 >>%CFG% 
echo #define PA_USE_WASAPI 1 >>%CFG% 
echo #define PA_USE_WMME 1 >>%CFG% 

portaudio-V19預構建的解決辦法:

echo // Automatically generated file >"$(ProjectDir)/$(Configuration)/config.h" 
IF NOT "%DXSDK_DIR%" == "" echo #define PA_USE_DS 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
IF NOT "%ASIOSDK_DIR%" == "" echo #define PA_USE_ASIO 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
IF NOT "%JACKSDK_DIR%" == "" echo #define PA_USE_JACK 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
IF NOT "%JACKSDK_DIR%" == "" echo #define PA_DYNAMIC_JACK 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
rem echo #define PA_USE_WDMKS 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
echo #define PA_USE_WASAPI 1 >>"$(ProjectDir)/$(Configuration)/config.h" 
echo #define PA_USE_WMME 1 >>"$(ProjectDir)/$(Configuration)/config.h" 

portaudio-V19生成後原:

echo on 
set BASE="../../../lib-src/portaudio-v19" 
set CFG=$(ProjectDir)$(Configuration)\config.h 
set INTDIR=$(Configuration) 
set CFLAGS=/O2 /GL /I "%BASE%/include" /I "%BASE%/src/common" /I "%BASE%/src/os/win" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"%INTDIR%/" /Fd"%INTDIR%" /W3 /nologo /c /wd4996 /FI "%CFG%" /errorReport:prompt 
set LIBS= 

find "PA_USE_DS 1" "%CFG%" 
IF ERRORLEVEL 1 goto NoDS 

cl %CFLAGS% /I "%DXSDK_DIR%/include" "%BASE%/src/hostapi/dsound/pa_win_ds.c" 
cl %CFLAGS% /I "%DXSDK_DIR%/include" "%BASE%/src/hostapi/dsound/pa_win_ds_dynlink.c" 

set LIBS="%DXSDK_DIR%/lib/x86\dxguid.lib" 

:NoDS 

find "PA_USE_WASAPI 1" "%CFG%" 
IF ERRORLEVEL 1 goto NoWASAPI 

cl %CFLAGS% "%BASE%/src/hostapi/wasapi/pa_win_wasapi.c" 

:NoWASAPI 

find "PA_USE_WDMKS 1" "%CFG%" 
IF ERRORLEVEL 1 goto NoWDMKS 

cl %CFLAGS% "%BASE%/src/hostapi/wdmks/pa_win_wdmks.c" 

:NoWDMKS 

find "PA_USE_ASIO 1" "%CFG%" 
IF ERRORLEVEL 1 goto NoASIO 

cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%BASE%/src/hostapi/asio/pa_asio.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%BASE%/src/hostapi/asio/iasiothiscallresolver.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/common/asio.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/host/asiodrivers.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/host/pc/asiolist.cpp" 

:NoASIO 

find "PA_USE_JACK 1" "%CFG%" >NUL 
IF ERRORLEVEL 1 goto NoJACK 

cl %CFLAGS% /I "%JACKSDK_DIR%/includes" "%BASE%/src/hostapi/jack/pa_jack.c" 
cl %CFLAGS% /I "%JACKSDK_DIR%/includes" "%BASE%/src/hostapi/jack/pa_jack_dynload.c" 

:NoJACK 

lib /OUT:"$(TargetPath)" "%INTDIR%/*.obj" %LIBS% 

portaudio-v19構建後的fi X:

find "PA_USE_DS 1" "$(ProjectDir)$(Configuration)/config.h" 
IF ERRORLEVEL 1 goto NoDS 

cl /O2 /GL /I "../../../lib-src/portaudio-v19/include" /I "../../../lib-src/portaudio-v19/src/common" /I "../../../lib-src/portaudio-v19/src/os/win" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)/" /Fd"$(IntDir)/" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)$(Configuration)/config.h" /errorReport:prompt /I "%DXSDK_DIR%/include" "../../../lib-src/portaudio-v19/src/hostapi/dsound/pa_win_ds.c" 
cl /O2 /GL /I "../../../lib-src/portaudio-v19/include" /I "../../../lib-src/portaudio-v19/src/common" /I "../../../lib-src/portaudio-v19/src/os/win" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)/" /Fd"$(IntDir)/" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)$(Configuration)/config.h" /errorReport:prompt /I "%DXSDK_DIR%/include" "../../../lib-src/portaudio-v19/src/hostapi/dsound/pa_win_ds_dynlink.c" 

:NoDS 

find "PA_USE_WASAPI 1" "$(ProjectDir)$(Configuration)/config.h" 
IF ERRORLEVEL 1 goto NoWASAPI 

cl /O2 /GL /I "../../../lib-src/portaudio-v19/include" /I "../../../lib-src/portaudio-v19/src/common" /I "../../../lib-src/portaudio-v19/src/os/win" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)/" /Fd"$(IntDir)/" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)$(Configuration)/config.h" /errorReport:prompt "../../../lib-src/portaudio-v19/src/hostapi/wasapi/pa_win_wasapi.c" 

:NoWASAPI 

find "PA_USE_WDMKS 1" "$(ProjectDir)$(Configuration)/config.h" 
IF ERRORLEVEL 1 goto NoWDMKS 

cl %CFLAGS% "%BASE%/src/hostapi/wdmks/pa_win_wdmks.c" 

:NoWDMKS 

find "PA_USE_ASIO 1" "$(ProjectDir)$(Configuration)/config.h" 
IF ERRORLEVEL 1 goto NoASIO 

cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%BASE%/src/hostapi/asio/pa_asio.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%BASE%/src/hostapi/asio/iasiothiscallresolver.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/common/asio.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/host/asiodrivers.cpp" 
cl %CFLAGS% /I "%ASIOSDK_DIR%/common" /I "%ASIOSDK_DIR%/host" /I "%ASIOSDK_DIR%/host/pc" "%ASIOSDK_DIR%/host/pc/asiolist.cpp" 

:NoASIO 

find "PA_USE_JACK 1" "$(ProjectDir)$(Configuration)/config.h" 
IF ERRORLEVEL 1 goto NoJACK 

cl %CFLAGS% /I "%JACKSDK_DIR%/includes" "%BASE%/src/hostapi/jack/pa_jack.c" 
cl %CFLAGS% /I "%JACKSDK_DIR%/includes" "%BASE%/src/hostapi/jack/pa_jack_dynload.c" 

:NoJACK 

lib /OUT:"$(TargetPath)" "$(IntDir)/*.obj" "%DXSDK_DIR%/lib/x86/dxguid.lib" 


portmixer Post-Build original: 

set BASE="../../../lib-src/portmixer" 
set CFLAGS=/O2 /GL /I "%BASE%/../portaudio-v19/include" /I "%BASE%/include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "PX_USE_WIN_MME" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)" /Fd"$(IntDir)" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)/$(Configuration)/config.h" /errorReport:prompt 

if "%DXSDK_DIR%"=="" goto NoDX 

cl %CFLAGS% /I "%DXSDK_DIR%/include" "%BASE%/src/px_win_ds.c" 

set LIBS="%DXSDK_DIR%/lib/x86/dxguid.lib" 

:NoDX 

lib /OUT:"$(TargetPath)" "$(IntDir)*.obj" %LIBS% 


portmixer Post-Build fix: 

if "%DXSDK_DIR%"=="" goto NoDX 

cl /O2 /GL /I "../../../lib-src/portmixer/../portaudio-v19/include" /I "../../../lib-src/portmixer/include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "PX_USE_WIN_MME" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)/" /Fd"$(IntDir)/" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)/$(Configuration)/config.h" /errorReport:prompt /I "%DXSDK_DIR%/include" "../../../lib-src/portmixer/src/px_win_ds.c" 

:NoDX 

lib /OUT:"$(TargetPath)" "$(IntDir)/*.obj" "%DXSDK_DIR%/lib/x86/dxguid.lib" 

portmixer生成後原:

set BASE="../../../lib-src/portmixer" 
set CFLAGS=/O2 /GL /I "%BASE%/../portaudio-v19/include" /I "%BASE%/include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "PX_USE_WIN_MME" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)" /Fd"$(IntDir)" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)/$(Configuration)/config.h" /errorReport:prompt 

if "%DXSDK_DIR%"=="" goto NoDX 

cl %CFLAGS% /I "%DXSDK_DIR%/include" "%BASE%/src/px_win_ds.c" 

set LIBS="%DXSDK_DIR%/lib/x86/dxguid.lib" 

:NoDX 

lib /OUT:"$(TargetPath)" "$(IntDir)*.obj" %LIBS% 

portmixer生成後修復:

if "%DXSDK_DIR%"=="" goto NoDX 

cl /O2 /GL /I "../../../lib-src/portmixer/../portaudio-v19/include" /I "../../../lib-src/portmixer/include" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "PX_USE_WIN_MME" /D "_MBCS" /GF /FD /EHsc /MD /Gy /Fo"$(IntDir)/" /Fd"$(IntDir)/" /W3 /nologo /c /wd4996 /FI "$(ProjectDir)/$(Configuration)/config.h" /errorReport:prompt /I "%DXSDK_DIR%/include" "../../../lib-src/portmixer/src/px_win_ds.c" 

:NoDX 

lib /OUT:"$(TargetPath)" "$(IntDir)/*.obj" "%DXSDK_DIR%/lib/x86/dxguid.lib" 
0

我沒有足夠的聲譽湯姆邦納的回答發表評論,但使用這些信息,我發現我的同樣問題(使用不同的代碼庫)的解決方案是在與.targets文件相同的目錄中找到.props文件,並使用相同的名稱(即QtUIBuild.props和QtUIBuild.targets),並查找違規路徑。在我的情況是不斷變化的

<Outputs>".\..\..\source\qt\GeneratedFiles\ui_%(Filename).h"</Outputs> 

的事項

<Outputs>.\..\..\source\qt\GeneratedFiles\ui_%(Filename).h</Outputs>