如何检测CMake脚本是否正在MSYS2环境中运行?

Foa*_*oad 5 cmake msys2

我想检测CMakeLists.txtMSYS2 环境/shell 中是否正在调用:

$ uname
MSYS_NT-10.0-18363
Run Code Online (Sandbox Code Playgroud)

这里我尝试过:

cmake_minimum_required(VERSION 3.10)

project(test_cmake)

if(MSYS) # yes I have also tried MSYS2 with the same result!
    message("This is MSYS")
else()
    message("This is not MSYS")
endif()
Run Code Online (Sandbox Code Playgroud)

This is not MSYS它在 Windows cmd 和 MSYS2 shell 中返回相同的结果。我其实并不感到惊讶,因为 MSYS2 和 MSYS 是两种不同的野兽!同样从这里,我尝试过:

message(${CMAKE_SYSTEM_NAME})
Run Code Online (Sandbox Code Playgroud)

在 cmd 和 MSYS2 中都会返回Windows!如果您能帮助我了解如何检测该cmake命令是否是从 MSYS2 shell 内部运行的,我将不胜感激。感谢您提前的支持。

PS1。作为我个人的注释,这个这个似乎是值得研究的好资料。

PS2奇怪的是命令

message(${CMAKE_HOST_SYSTEM_NAME})
Run Code Online (Sandbox Code Playgroud)

在我的 MSYS2 上也返回Windows,根据文档,它必须返回uname -s!

Kam*_*Cuk 1

我认为应该有一个更好的答案,但您可以使用您提供的输出uname

execute_process(COMMAND uname OUTPUT_VARIABLE uname)
if (uname MATCHES "^MSYS")
Run Code Online (Sandbox Code Playgroud)