42

我想强制 CMake使用CMakeLists.txt 中的“Unix Makefiles”生成器。

这是我现在使用的命令。

cmake -G "Unix Makefiles" .

我希望是这样。

cmake .

在安装了 VC 和自定义工具链的 Windows 上运行时。

我希望能够在CMakeLists.txt文件中设置生成器。

也许是这样的。

set(CMAKE_GENERATOR "Unix Makefiles")
4

4 回答 4

29

这对我有用 -在您的项目目录中创建一个名为PreLoad.cmake的文件,其中包含:

set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)

于 2017-07-21T22:47:37.050 回答
14

在我看来,CMAKE_GENERATOR如果在CMakeLists.txt. 如果您使用(即使在开头CMakeLists.txt

set(CMAKE_GENERATOR "Ninja")
message("generator is set to ${CMAKE_GENERATOR}")

你可以在输出中看到类似

% cmake ../source
-- The C compiler identification is GNU 4.9.2
...
-- Detecting CXX compile features - done
generator is set to Ninja
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/build

因此,该变量仅在生成过程的最后设置。如果你使用类似的东西

set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE)

in CMakeLists.txt,然后在第一次运行cmake ../source(不带-G)时使用默认生成器。不过,该变量CMAKE_GENERATOR存储在缓存中。因此,如果您cmake ../source之后重新运行,它将使用CMAKE_GENERATOR缓存中变量中指定的生成器。

不过,这肯定不是最优雅的解决方案;-) 也许使用一个批处理文件来实际cmake -G generator为用户执行...

于 2015-04-23T09:34:42.467 回答
2

这不是我得到的,当我运行相同的命令时,cmake 将寻找 gcc 编译器/make 实用程序。如果 PATH 设置不正确,它将失败,如下所示:

D:\Development\build>cmake -G "Unix Makefiles" ..\source
CMake 错误:CMake 无法找到与“Unix Makefiles”对应的构建程序。CMAKE_MAKE_PROGRAM 未设置。
  您可能需要选择不同的构建工具。
CMake 错误:错误需要内部 CMake 变量未设置,cmake 可能未正确构建。
缺少的变量是:
CMAKE_C_COMPILER_ENV_VAR
CMake 错误:错误需要内部 CMake 变量未设置,cmake 可能未正确构建。
缺少的变量是:
CMAKE_C_COMPILER
CMake 错误:找不到 cmake 模块文件:D:/Development/build/CMakeFiles/CMakeCCompiler.cmake
CMake 错误:错误需要内部 CMake 变量未设置,cmake 可能未正确构建。
缺少的变量是:
CMAKE_CXX_COMPILER_ENV_VAR
CMake 错误:错误需要内部 CMake 变量未设置,cmake 可能未正确构建。
缺少的变量是:
CMAKE_CXX_COMPILER
CMake 错误:找不到 cmake 模块文件:D:/Development/build/CMakeFiles/CMakeCXXCompiler.cmake
CMake 错误:在 EnableLanguage 之后未设置 CMAKE_C_COMPILER
CMake 错误:在 EnableLanguage 之后未设置 CMAKE_CXX_COMPILER
-- 配置不完整,出现错误!

当 gcc / mingw 在路径中时,一切正常。那么您能否提供有关您的 PATH 变量或 CMAKE 版本的更多信息?

于 2012-07-02T10:21:38.860 回答
1

您需要在 Generate 阶段设置生成器,以便将其写入缓存。第一次配置只需要运行一次此命令

cmake .. -DCMAKE_GENERATOR:INTERNAL=Ninja

这会将 Ninja 配置为默认生成器。

稍后您可以简单地运行

制作..

它会默认使用 Ninja 生成器

您可以在从命令行运行 CMake下阅读有关它的更多信息

从命令行运行 cmake 时,可以为 cmake 指定将在缓存中设置值的命令行选项。这是通过命令行上的 -DVARIABLE:TYPE=VALUE 语法完成的。这对于非交互式夜间测试构建很有用。

于 2020-11-18T11:03:44.003 回答