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
D:\Development\build>cmake -G "Unix Makefiles" ..\source
CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles". CMAKE_MAKE_PROGRAM is not set.
You probably need to select a different build tool.
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_C_COMPILER
CMake Error: Could not find cmake module file:D:/Development/build/CMakeFiles/CMakeCCompiler.cmake
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER_ENV_VAR
CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
Missing variable is:
CMAKE_CXX_COMPILER
CMake Error: Could not find cmake module file:D:/Development/build/CMakeFiles/CMakeCXXCompiler.cmake
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
5条答案
按热度按时间bz4sfanl1#
下面是我的工作-创建一个名为PreLoad.cmake的文件在您的项目目录中包含以下内容:
set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
8i9zcol22#
在我看来,如果在
CMakeLists.txt
中设置变量CMAKE_GENERATOR
,则设置得太晚了。如果使用(即使在CMakeLists.txt
开始时)您可以在输出中看到类似于
因此,变量只在生成过程的最后设置。
在
CMakeLists.txt
中,那么在第一次运行cmake ../source
(没有-G
)时,将使用 default 生成器。但是,变量CMAKE_GENERATOR
存储该高速缓存中。因此,如果您以后重新运行cmake ../source
,它将使用缓存中变量CMAKE_GENERATOR
中指定的生成器。不过,这肯定不是最优雅的解决方案;- )也许可以使用一个批处理文件,它将为用户实际执行
cmake -G generator
...pkwftd7m3#
这不是我得到的,当我运行相同的命令时,cmake会寻找一个gcc编译器/ make实用程序。如果PATH设置不正确,它会失败,并显示如下:
当gcc / mingw在路径中时,一切都正常。2所以你能提供更多关于PATH变量或CMAKE版本的信息吗?
yyyllmsg4#
您需要在“生成”阶段设置生成器,以便将其写入该高速缓存。
-DCMAKE_GENERATOR:内部=忍者
这会将Ninja配置为默认生成器。
稍后您只需运行
可以制作..
它将使用忍者生成器作为默认值
您可以在Running CMake from the command line下阅读更多信息
从命令行运行cmake时,可以为cmake指定命令行选项,以设置该高速缓存中的值。这是通过命令行上的-DVARIABLE:TYPE=VALUE语法完成的。这对于非交互式的夜间测试构建非常有用。
ubbxdtey5#
CMake 3.19引入了一个新特性-预置。因此,要自动选择合适的发生器,您可以在
CMakePresets.json
中指定它的名称。这些文件的完整说明可从以下网址获得:https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html