CMAKE_SYSTEM_NAME won't be evaluated to "CYGWIN" or "MSYS".
Problem Description
This is related to: https://github.com/gabime/spdlog/issues/2532
It seems that CMake uses the following if()
statement to detect whether it is on MSYS or Cygwin subsystem. (link)
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN" OR CMAKE_SYSTEM_NAME MATCHES "MSYS")
set(CMAKE_CXX_EXTENSIONS ON)
endif()
However, I do some experiments to find that they all print Windows
value. What happened?
Demonstration
-
Example CMakeLists.txt
cmake_minimum_required(VERSION 3.20) project(cmake-windows LANGUAGES C CXX) message("CMAKE_SYSTEM_NAME = ${CMAKE_SYSTEM_NAME}")
-
Example CMakePresets.json
Click to expand
{ "version": 5, "configurePresets": [ { "name": "msys2-gcc-x64-ninja-debug", "displayName": "MSYS2 GCC x64 (Ninja) Debug", "description": "Using GCC x64 compiler with \"Ninja\" geneartor on MSYS2 - Debug", "generator": "Ninja", "binaryDir": "${sourceDir}/build/${presetName}", "installDir": "${sourceDir}/install/${presetName}", "environment": { "PATH": "C:\\msys64\\usr\\bin;$penv{PATH}" }, "cacheVariables": { "CMAKE_C_COMPILER": "gcc.exe", "CMAKE_CXX_COMPILER": "g++.exe", "CMAKE_BUILD_TYPE": "Debug" } }, { "name": "cygwin-gcc-x64-ninja-debug", "displayName": "Cygwin GCC x64 (Ninja) Debug", "description": "Using GCC x64 compiler with \"Ninja\" geneartor on Cygwin - Debug", "generator": "Ninja", "environment": { "PATH": "C:\\cygwin64\\bin;$penv{PATH}" }, "binaryDir": "${sourceDir}/build/${presetName}", "installDir": "${sourceDir}/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "gcc.exe", "CMAKE_CXX_COMPILER": "g++.exe", "CMAKE_BUILD_TYPE": "Debug" } } ] }
-
Demo of GCC/MSYS2 compilers
Click to expand
F:\GitRepo\cmake-msys-cygwin>cmake --preset msys2-gcc-x64-ninja-debug Preset CMake variables: CMAKE_BUILD_TYPE="Debug" CMAKE_CXX_COMPILER="g++.exe" CMAKE_C_COMPILER="gcc.exe" CMAKE_INSTALL_PREFIX:PATH="F:/GitRepo/cmake-msys-cygwin/install/msys2-gcc-x64-ninja-debug" Preset environment variables: PATH="C:\msys64\usr\bin;C:\Python\Python310\Scripts\;C:\Python\Python310\;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\dotnet\;C:\Program Files\CMake\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\gsudo\;C:\Program Files\NASM;C:\Program Files\Git\cmd;C:\Program Files\Typora;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X64\;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X86\;C:\Program Files (x86)\Common Files\Pulse Secure\TNC Client Plugin\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\hwhsu1231\AppData\Local\Microsoft\WindowsApps;C:\Users\hwhsu1231\.dotnet\tools;" -- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/msys64/usr/bin/gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/msys64/usr/bin/g++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMAKE_SYSTEM_NAME = Windows -- Configuring done -- Generating done -- Build files have been written to: F:/GitRepo/cmake-msys-cygwin/build/msys2-gcc-x64-ninja-debug
-
Demo of GCC/Cygwin compilers
Click to expand
F:\GitRepo\cmake-msys-cygwin>cmake --preset cygwin-gcc-x64-ninja-debug Preset CMake variables: CMAKE_BUILD_TYPE="Debug" CMAKE_CXX_COMPILER="g++.exe" CMAKE_C_COMPILER="gcc.exe" CMAKE_INSTALL_PREFIX:PATH="F:/GitRepo/cmake-msys-cygwin/install/cygwin-gcc-x64-ninja-debug" Preset environment variables: PATH="C:\cygwin64\bin;C:\Python\Python310\Scripts\;C:\Python\Python310\;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\dotnet\;C:\Program Files\CMake\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\gsudo\;C:\Program Files\NASM;C:\Program Files\Git\cmd;C:\Program Files\Typora;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X64\;C:\Program Files (x86)\Pulse Secure\VC142.CRT\X86\;C:\Program Files (x86)\Common Files\Pulse Secure\TNC Client Plugin\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\hwhsu1231\AppData\Local\Microsoft\WindowsApps;C:\Users\hwhsu1231\.dotnet\tools;" -- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/cygwin64/bin/gcc.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/cygwin64/bin/g++.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMAKE_SYSTEM_NAME = Windows -- Configuring done -- Generating done -- Build files have been written to: F:/GitRepo/cmake-msys-cygwin/build/cygwin-gcc-x64-ninja-debug