Windows 上的 CMake 和 MinGW 编译,无需 -G "MinGW Makefiles" 标志

Sor*_*erg 6 c++ makefile cmake

我想使用 CMake 和 MinGW 从 Windows PowerShell 命令行构建我的 C++ 应用程序。

当我以“正常方式”执行此操作时,使用以下命令:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

CMake 选择 V​​isual Studio 作为默认编译器,并且不会为我生成任何 Makefile。

我希望 CMake 使用 MinGW 作为默认编译器,并生成 Makefile。 当我运行这些命令时它完全按照我想要的方式工作,添加 -G "MinGW Makefiles" 标志:

mkdir build
cd build
cmake .. -G "MinGW Makefiles"
make
Run Code Online (Sandbox Code Playgroud)

如何在不添加 -G“MinGW Makefiles”标志的情况下让 CMake 一直以这种方式运行?

我试过CMAKE_GENERATOR在 Windows 中设置一个环境变量,并将它指向“ path\to\mingw\bin”、“ path\to\mingw\bin\mingw32-make.exe”,以及一个读取“ MinGW Makefile”的字符串。

在跑步refreshenv然后cmake ..再次尝试跑步后,这些都不适合我。

有人知道这是否是用于指定 CMake 的默认行为的正确环境变量吗?如果是,我应该使用什么值?

Joh*_*ger 6

如何在不添加 -G“MinGW Makefiles”标志的情况下让 CMake 一直以这种方式运行?

你不能,在迄今为止发布的任何版本的 CMake 中都不能。CMake 在开始评估任何生成器之前选择一个生成器CMakeLists.txt文件。默认情况下,它根据运行时平台和可用工具集选择生成器,命令行选项是目前影响或覆盖 CMake 选择生成器的唯一方法。

在评论中,@Tsyvarev 指出了一个开放的 CMake 问题报告,要求提供与您要求的功能完全相同的功能。相关的评论线程提供了更多细节,最后一条评论是在今年早些时候。我猜想最终 CMake 将添加对通过环境变量指定生成器的支持,但就目前而言,您的-G选择是唯一可用的选择。如果您想保存击键并降低输入错误的风险,您可以考虑编写脚本。


小智 4

我知道这已经晚了。但万一有人来到这里并发现这个答案有用,
你所要做的就是创建一个function 像这样的东西:

function gcmake {cmake .. -G "MinGW Makefiles"}
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地输入

mkdir build
cd build
gcmake ..
make
Run Code Online (Sandbox Code Playgroud)

提示:您可以将此功能添加到您的个人资料中,以便将其保存到任何新会话中。你可以遵循这个很好的指南