VS 2017: "Invalid character escape" in CMAKE_VS_MSBUILD_COMMAND when passed to a macro
Test case:
cmake_minimum_required(VERSION 3.9)
message(STATUS "CMAKE_VERSION: [ " ${CMAKE_VERSION} " ]")
message(STATUS "CMAKE_CURRENT_LIST_FILE: [ " ${CMAKE_CURRENT_LIST_FILE} " ]")
message(STATUS "CMAKE_SYSTEM: [ " ${CMAKE_SYSTEM} " ]")
function(messageFunction)
message("${ARGN}")
endfunction()
macro(messageMacro)
message("${ARGN}")
endmacro()
messageFunction("Works: ${CMAKE_VS_MSBUILD_COMMAND}")
string(REGEX REPLACE "\\\\" "/" FIXED "${CMAKE_VS_MSBUILD_COMMAND}")
messageMacro("Works: ${FIXED}")
messageMacro("Invalid character escape! ${CMAKE_VS_MSBUILD_COMMAND}")
Result:
-- Building for: Visual Studio 15 2017
-- The C compiler identification is MSVC 19.11.25547.0
-- The CXX compiler identification is MSVC 19.11.25547.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.11.25503/bin/HostX86/x86/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.11.25503/bin/HostX86/x86/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.11.25503/bin/HostX86/x86/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.11.25503/bin/HostX86/x86/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMAKE_VERSION: [ 3.9.2 ]
-- CMAKE_CURRENT_LIST_FILE: [ C:/cmake_foo/CMakeLists.txt ]
-- CMAKE_SYSTEM: [ Windows-10.0.15063 ]
Works: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional/MSBuild/15.0/Bin/MSBuild.exe
Works: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/Bin/MSBuild.exe
CMake Error at CMakeLists.txt:11 (message):
Syntax error in cmake code at
C:/cmake_foo/CMakeLists.txt:11
when parsing string
Invalid character escape! C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional/MSBuild/15.0/Bin/MSBuild.exe
Invalid character escape '\P'.
Call Stack (most recent call first):
CMakeLists.txt:22 (messageMacro)
-- Configuring incomplete, errors occurred!
See also "C:/cmake_foo/build/CMakeFiles/CMakeOutput.log".
Command exited with non-zero status 1