我想强制 CMake使用CMakeLists.txt 中的“Unix Makefiles”生成器。
这是我现在使用的命令。
cmake -G "Unix Makefiles" .
我希望是这样。
cmake .
在安装了 VC 和自定义工具链的 Windows 上运行时。
我希望能够在CMakeLists.txt
文件中设置生成器。
也许是这样的。
set(CMAKE_GENERATOR "Unix Makefiles")
我想强制 CMake使用CMakeLists.txt 中的“Unix Makefiles”生成器。
这是我现在使用的命令。
cmake -G "Unix Makefiles" .
我希望是这样。
cmake .
在安装了 VC 和自定义工具链的 Windows 上运行时。
我希望能够在CMakeLists.txt
文件中设置生成器。
也许是这样的。
set(CMAKE_GENERATOR "Unix Makefiles")
这对我有用 -在您的项目目录中创建一个名为PreLoad.cmake的文件,其中包含:
set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
在我看来,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
为用户执行...
这不是我得到的,当我运行相同的命令时,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 版本的更多信息?
您需要在 Generate 阶段设置生成器,以便将其写入缓存。第一次配置只需要运行一次此命令
cmake .. -DCMAKE_GENERATOR:INTERNAL=Ninja
这会将 Ninja 配置为默认生成器。
稍后您可以简单地运行
制作..
它会默认使用 Ninja 生成器
您可以在从命令行运行 CMake下阅读有关它的更多信息
从命令行运行 cmake 时,可以为 cmake 指定将在缓存中设置值的命令行选项。这是通过命令行上的 -DVARIABLE:TYPE=VALUE 语法完成的。这对于非交互式夜间测试构建很有用。