2015-04-02 56 views
0

我注意到Custom Build Steps在我的Visual Studio 2013中停止工作。 CMAKE生成的ZERO_CHECK不起作用。我嘗試了一切從Troubleshooting Build Customizations但沒有任何幫助。爲什麼自定義構建步驟在VS2012中工作,但在VS2013中不起作用?


我創建簡單的C++控制檯應用程序,改變項類型的ReadMe.txt從textCustom Build Tool,並進入簡單的命令來Command Line

@echo on 
copy %0 test.bat 
del c:\1.txt 

在項目文件中,它看起來像:

<ItemGroup> 
    <CustomBuild Include="ReadMe.txt"> 
     <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">@echo on 
copy %0 test.bat 
del c:\1.txt</Command> 
    </CustomBuild> 
    </ItemGroup> 

在像預想的Visual Studio 2012的一切工作,創建的文件test.bat的,文件c:\ 1.txt的刪除。但在Visual Studio 2013中它不起作用。 的Visual Studio 2013的輸出:

1>Target "ComputeCustomBuildOutput: (TargetId:28)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets" from project "D:\Projects\Projects\VS2013Test\CppConsole2012\CppConsole2012\CppConsole2012.vcxproj" (target "CustomBuild" depends on it): 
1>Task "CreateItem" skipped, due to false condition; ('%(CustomBuildDirsToMake.OutputFileToTool)'!='') was evaluated as (''!=''). 
1>Task "MakeDir" (TaskId:15) 
1> Task Parameter: 
1>  Directories= 
1>   D:\Projects\Projects\VS2013Test\CppConsole2012\CppConsole2012\ 
1>     AcceptableNonZeroExitCodes= 
1>     [email protected] on 
1> copy %0 test.bat 
1> del c:\1.txt 
1>     LinkObjects=true 
1>     Message=Performing Custom Build Tools 
1>     MinimalRebuildFromTracking=true 
1>     Outputs=SomeText; 
1>     TrackerLogDirectory=Debug\CppConsole2012.tlog\ 
1>     TreatOutputAsContent=false (TaskId:15) 
1>Done executing task "MakeDir". (TaskId:15) 
1>Done building target "ComputeCustomBuildOutput" in project "CppConsole2012.vcxproj".: (TargetId:28) 
1>Target "CustomBuild: (TargetId:29)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets" from project "D:\Projects\Projects\VS2013Test\CppConsole2012\CppConsole2012\CppConsole2012.vcxproj" (target "_BuildGenerateSourcesAction" depends on it): 
1>Done building target "CustomBuild" in project "CppConsole2012.vcxproj".: (TargetId:29) 

的Visual Studio 2012輸出:

1>Target "ComputeCustomBuildOutput: (TargetId:41)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets" from project "D:\Projects\Projects\VS2012Test\CppConsole2012\CppConsole2012\CppConsole2012.vcxproj" (target "CustomBuild" depends on it): 
1>Task "CreateItem" skipped, due to false condition; ('%(CustomBuildDirsToMake.OutputFileToTool)'!='') was evaluated as (''!=''). 
1>Task "MakeDir" (TaskId:27) 
1> Task Parameter: 
1>  Directories= 
1>   D:\Projects\Projects\VS2012Test\CppConsole2012\CppConsole2012\ 
1>     AcceptableNonZeroExitCodes= 
1>     [email protected] on 
1> copy %0 test.bat 
1> del c:\1.txt 
1>     LinkObjects=true 
1>     Message=Performing Custom Build Tools 
1>     MinimalRebuildFromTracking=true 
1>     Outputs=SomeText; 
1>     TrackerLogDirectory=Debug\ 
1>     TreatOutputAsContent=false (TaskId:27) 
1>Done executing task "MakeDir". (TaskId:27) 
1>Done building target "ComputeCustomBuildOutput" in project "CppConsole2012.vcxproj".: (TargetId:41) 
1>Target "CustomBuild: (TargetId:42)" in file "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets" from project "D:\Projects\Projects\VS2012Test\CppConsole2012\CppConsole2012\CppConsole2012.vcxproj" (target "_BuildGenerateSourcesAction" depends on it): 
1>Using "CustomBuild" task from assembly "Microsoft.Build.CppTasks.Common.v110, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". 
1>Task "CustomBuild" (TaskId:28) 
1> Task Parameter: 
1>  Sources= 
1>   ReadMe.txt 
1>     AcceptableNonZeroExitCodes= 
1>     [email protected] on 
1> copy %0 test.bat 
1> del c:\1.txt 
1>     LinkObjects=true 
1>     Message=Performing Custom Build Tools 
1>     MinimalRebuildFromTracking=true 
1>     Outputs=SomeText; 
1>     TrackerLogDirectory=Debug\ 
1>     TreatOutputAsContent=false (TaskId:28) 
1> Task Parameter:BuildSuffix= 
1> :VCEnd (TaskId:28) 
1> Task Parameter:TrackerLogDirectory=Debug\ (TaskId:28) 
1> Task Parameter:MinimalRebuildFromTracking=True (TaskId:28) 
1> Task Parameter:TrackFileAccess=True (TaskId:28) 
1> Task Parameter:ToolArchitecture=Native32Bit (TaskId:28) 
1> Forcing rebuild of all source files due to missing command TLog "D:\Projects\Projects\VS2012Test\CppConsole2012\CppConsole2012\Debug\custombuild.command.1.tlog". (TaskId:28) 
1> @echo on 
1> copy %0 test.bat 
1> del c:\1.txt (TaskId:28) 
1> Performing Custom Build Tools (TaskId:28) 
1>   1 file(s) copied. (TaskId:28) 
1> Could Not Find c:\1.txt (TaskId:28) 
1>Done executing task "CustomBuild". (TaskId:28) 
1>Done building target "CustomBuild" in project "CppConsole2012.vcxproj".: (TargetId:42) 

你可以看到VS2012日誌的一部分是在VS2013缺席:

1>Using "CustomBuild" task from assembly "Microsoft.Build.CppTasks.Common.v110, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". 
1>Task "CustomBuild" (TaskId:28) 
... 
1>Done executing task "CustomBuild". (TaskId:28) 
+0

你有哪個版本的CMake? – Antonio 2015-04-02 20:55:31

+0

我有CMAKE版本3.2.1 – paramosh 2015-04-02 21:39:42

+0

我只能說卸載並重新安裝Visual Studio 2013幫助了我。 (修理沒有幫助)。現在問題已解決。 – paramosh 2015-04-27 18:15:32

回答

1

你錯過了Outputs元數據。有關信息,請參閱this MSDN page

<ItemGroup> 
<CustomBuild Include="ReadMe.txt"> 
    <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 
@echo on 
copy %0 test.bat 
del c:\1.txt 
    </Command> 
    <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">test.bat;%(Outputs)</Outputs> 
</CustomBuild> 
</ItemGroup> 

沒有它,我從CustomBuild任務的警告,

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8018: No outputs specified for item "ReadMe.txt". Its custom build command will be skipped. [<PATH>\SandboxCpp.vcxproj] 
    @echo on 
      copy %0 test.bat 
      del c:\1.txt (TaskId:15) 
Done executing task "CustomBuild". (TaskId:15) 

我猜你沒有得到的Using "CustomBuild" task from assembly打印輸出,因爲你的詳細級別是在VS2013日誌太低(那裏應該有更多)。

相關問題