cmake MSYS Makefiles生成器缺失

17

我已经通过pacman安装了cmake 3.2.3。当我尝试在msys64 shell中使用它时,出现错误:

$ cmake -G "MSYS Makefiles" ..
CMake Error: Could not create named generator MSYS Makefiles

cmake --help没有将其列为可用生成器。

我看到在/usr/share/cmake-3.2.3/Modules/Platform中有一个MSYS.cmake。

我错过了什么?

4个回答

29

我认为你需要安装mingw-w64-i686-cmake(或者64位版本的mingw-w64-x86_64-cmake),而不是安装cmake包。


1
我还必须运行${MINGW_PREFIX}/bin/cmake而不是只运行cmake才能使其工作。 - Michaël Witrant
截至2019年,Cygwin安装程序中没有mingw64的32位或64位版本,我也无法通过apt-cyg找到它们。 - Hashim Aziz
@Hashim 这个问题是关于MinGW,而不是Cygwin。我的理解是它们是完全独立的系统:https://dev59.com/NXRA5IYBdhLWcg3w8iol - Evan
1
实际上是关于MSYS Makefiles的,这是Cmake生成器,当使用MinGW-64包进行构建时,Cygwin依赖它(这是一个常见的用例,因为与使用本地Cygwin包构建相比更可靠)。我上面的评论并不改变你的答案,我只是想让那些使用Cygwin的人知道这一点。 - Hashim Aziz
切换到mingw-w64-x86_64-cmake (3.25.2) 对我也起了作用,在移除旧的 cmake (3.25.1-1) 后。它添加了一些之前缺失的生成器。 - Tyler Shellberg

3

当我在MSYS shell中尝试运行cmake时,收到了完全相同的消息。请改用MinGW Shell(例如MinGW-w64 Win64 Shell)。


就我个人而言,我只是通过 .bash_profile 将 MinGW 的 bin 目录添加到我的 MSYS 用户主目录的路径中。这使我能够使用 MSYS 并指定我想要的 MinGW 版本。然后我几乎在终端方面都使用 MSYS。 - Jimmio92

2

如果你在Linux上使用MinGW编译本地的Windows二进制文件

MinGWMSYS生成器仅适用于基于Windows的发行版。请参见cmake.cxx中的#ifdef

#if defined(_WIN32) && !defined(__CYGWIN__)
如果您正在进行交叉编译,请使用可用的MinGW工具链之一。请参见CMake维基中的“如何使用MinGW交叉编译Windows软件”章节,例如:https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/cross_compiling/Mingw
如果您在Windows上使用MinGW编译Windows二进制文件
在我的Windows PC上,我只安装了一个CMake版本(正常的MSI Windows Installer,并将CMake目录添加到PATH环境变量中),可以从标准CMD shell和我的MSYS shell中运行。
因此,在这种情况下,无需安装特殊的MinGW版本的CMake(例如针对CygWin)。
但是,最近我已经多次使用MinGW-w64从源代码重新构建了CMake以测试一些性能优化,结果并不能直接使用。为解决链接器错误,我按照这里的建议添加了-DCMAKE_EXE_LINKER_FLAGS="-Wl,--allow-multiple-definition",生成的cmake.exe仍支持“MSYS Makefiles”生成器。
因此,是的,正如您所评论的那样,pacman构建可能存在问题。

它是使用msys/mingw构建的,因此它是一个Windows发行版。你是说生成器列表在可执行文件中是硬编码的吗?我想这意味着pacman构建存在问题。 - Scott Thibault
@ScottThibault 是的,生成器列表是硬编码到可执行文件中的,并且取决于为哪个主机操作系统构建CMake。而您的安装路径/usr/share/cmake-3.2.3表明您正在使用/运行Linux发行版。您在哪个主机操作系统上执行CMake? - Florian
@ScottThibault 我已更新我的答案,以涵盖可能的主机操作系统变体。 - Florian

1

我猜测 pacman 构建有问题,所以我通过从 cmake.org 下载 msi 安装程序并安装 Windows 版本的 CMake 来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接