Thread (14 messages) flat view 14 messages, 3 authors, 2021-05-31

Re: [RFH] CMake: detect if being run via Visual Studio, independent of build generator?

From: Philip Oakley <hidden>
Date: 2021-05-29 20:31:33

On 29/05/2021 19:33, Sibi Siddharthan wrote:
On Sat, May 29, 2021 at 9:55 PM Philip Oakley [off-list ref] wrote:
quoted
On 29/05/2021 16:49, Matt Rogers wrote:
quoted
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.
Thanks for confirming what I'm seeing. It's good to have.
quoted
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.
CMake sets this variable.
Please see {CMAKE_INSTALLATION}/share/cmake-<version>/modules/Platform/Windows-MSVC.cmake.
This happens after CMake is required to find a compiler.
This happens in line:93 where we enable the C language.
Ahh, so it (MSVC) would be unset at that point no matter what at that
early point in the code, yes?
To fix this I would suggest to change line:53

-  if(MSVC AND NOT EXISTS ${VCPKG_DIR})
+ if(CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT EXISTS ${VCPKG_DIR})
I'd seen this one recommended on a few StackOverflow answers but it no
longer works (for a new install of Visual Studio) because
CMAKE_GENERATOR is now set to "Ninja" as default (sigh).

Simply dropping the MSVC test may be one option - we are already guarded
by the earlier WIN32 test so were aren't on another OS, though I expect
there could be some who want to not use VS, and already have options..
and
add CMakeSettings.json to force Visual Studio to use MSBuild.
I was trying to avoid requiring VS users do any extra set up steps. Too
many steps often puts off new users, and forcing a change could be
annoying for established users - hence the caution.
Please see https://docs.microsoft.com/en-us/cpp/build/cmakesettings-reference?view=msvc-160
I'll have a look.

Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help