CMake 3.10 and protobuf: System.NotSupportedException: The given path's format is not supported.
Here is sample project with CMakeLists.txt
calling protobuf_generate_cpp
macro for which I generate Visual Studio 2017 (Version 15.5.2) solution with CMake 3.10.1.
On attempt to build, MSBuild throws this exception:
msbuild /p:Configuration=Release /t:Build mytest.sln
...
InitializeBuildStatus:
Creating "mytest.dir\Release\mytest.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: The "Cust omBuild" task failed unexpectedly. [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: System.No tSupportedException: The given path's format is not supported. [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Sys tem.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath) [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Sys tem.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath ) [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.CPPTasks.CustomBuild.GetInputs(ITaskItem item) [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.CPPTasks.CustomBuild.BuildExecutionGraph() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.CPPTasks.CustomBuild.GenerateCommandLineCommands(CommandLineFormat format, EscapeFormat escapeFormat) [D:\tmp\mytest\_build.cmake3101\myt est.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.CPPTasks.VCToolTask.GenerateCommandLineCommands() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.Utilities.ToolTask.Execute() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.CPPTasks.TrackedVCToolTask.Execute() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB4018: at Mic rosoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() [D:\tmp\mytest\_build.cmake3101\mytest.vcxproj]
Done Building Project "D:\tmp\mytest\_build.cmake3101\mytest.vcxproj" (default targets) -- FAILED.
If I generate the solution using CMake 3.8.0, the custom build step running protoc
succeeds:
...
InitializeBuildStatus:
Creating "mytest.dir\Release\mytest.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
Building Custom Rule D:/tmp/mytest/CMakeLists.txt
CMake does not need to re-run because D:/tmp/mytest/_build.cmake380/CMakeFiles/generate.stamp is up-to-date.
Running C++ protocol buffer compiler on proto/mytest.proto
CUSTOMBUILD : [libprotobuf warning F: \V9.x64\Libraries\External\Source\protobuf\x64\Release\src\google\protobuf\compiler\parser.cc:546] No syntax spe cified for the proto file: mytest.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syn tax.) [D:\tmp\mytest\_build.cmake380\mytest.vcxproj]
ClCompile:
...
Edited by Mateusz Łoskot