Re: [RFH] CMake: detect if being run via Visual Studio, independent of build generator?
- From
Matt Rogers <mattr94@gmail.com>
- Date
- May 29, 2021, 15:49 UTC
- Message-ID
- <CAOjrSZtWVEUNEuJFw8WGPAW0YNccN9LWyuHZ28aKecdjd6dp=A@mail.gmail.com>
- In-Reply-To
- <013f42a4-19f4-a935-7068-db3f7ff40446@iee.email>
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