我想检测是否在MSYS2环境/ shell中召唤了CMakeLists.txt
:
$ uname
MSYS_NT-10.0-18363
从here我尝试过:
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()
在Windows cmd和MSYS2 Shell中都返回相同的结果This is not MSYS
。我实际上并不感到惊讶,因为MSYS2和MSYS是两种不同的野兽!同样从here开始,我尝试了:
message(${CMAKE_SYSTEM_NAME})
在cmd和MSYS2中都返回Windows
!如果您能帮助我知道如何从MSYS2 shell内部运行cmake
命令,我将不胜感激。感谢您的提前支持。
P.S.1。作为我自己的个人笔记,this和this似乎是值得研究的好资料。
P.S.2足够奇怪的命令
message(${CMAKE_HOST_SYSTEM_NAME})
在我的MSYS2上也返回Windows
,根据the docuemntation,它必须返回uname -s
的结果!
我认为应该有一个更好的答案,但是您可以使用显示的uname
中的输出:
execute_process(COMMAND uname OUTPUT_VARIABLE uname)
if (uname MATCHES "^MSYS")
好的,我想我知道问题出在哪里。正如我之前也有other issues一样,mingw64/mingw-w64-x86_64-cmake
导致了此问题。因此,我将其卸载并安装了msys/cmake
软件包。现在:
if(MSYS)
重新运行TRUE
message(${CMAKE_SYSTEM_NAME})
-> MSYS
message(${CMAKE_SYSTEM})
-> MSYS-3.0.7-338.x86_64
message(${CMAKE_HOST_SYSTEM_NAME})
-> MSYS
一个警告是,现在您必须通过-D CMAKE_MAKE_PROGRAM:path=mingw32-make
指定到制作工具的路径>