I have some experience at my job with CMake, but some quick testing has found that adding a check like: message("MSVC = ${MSVC} , WIN32 = ${WIN32}) shows that the MSVC is uninitialized and WIN322 is initialized. so the issue is that the MSVC variable isn't being set which is causing vcpkg_install.bat to not run, rather than the WIN32 variable. The msvc variable is intended to be set whenever the compiler is a Visual C/C++ compiler [1]. And it seems like visual studio should be setting that itself either via a toolchain or some other mechanism. As you noted the Ninja generator is os-agnostic and doesn't imply a compiler unlike the Visual Studio family of generators. running CMake with -DMSVC=1 should resolve the issue (Assuming you're actually using an MSVC based compiler). If the CMake is intended to support non-MSVC compilers like clang, etc. and vcpkg is required to do that build then the MSVC portion of the check should be removed, otherwise I am not sure if it's a Visual Studio issue for not correctly configuring with MSVC=1 when using an MSVC-based compiler or on the CMakeList.txt file for not correctly specifying when vcpk_install.bat needs to be installed. I don't really know what vcpkg does in the build to be sure though. 1: https://cmake.org/cmake/help/latest/variable/MSVC.html