我想强制CMake 在CMakeLists.txt中使用“Unix Makefile”生成器。
这是我现在使用的命令。
cmake -G "Unix Makefiles" .
我希望如此。
cmake .
在安装了VC的Windows和自定义工具链上运行时。
我希望能够在CMakeLists.txt
文件中设置生成器。
也许是这样的。
set(CMAKE_GENERATOR "Unix Makefiles")
答案 0 :(得分:18)
这对我有用 - 在项目目录中创建一个名为 PreLoad.cmake 的文件,其中包含:
set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
答案 1 :(得分:8)
在我看来,如果在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)
在CMakeLists.txt
中,然后在cmake ../source
的第一次运行中(没有-G
),使用默认生成器。但是,变量CMAKE_GENERATOR
存储在缓存中。因此,如果您之后重新运行cmake ../source
,它将使用缓存中CMAKE_GENERATOR
变量中指定的生成器。
这当然不是最优雅的解决方案;-)也许使用一个批处理文件,它将为用户实际执行cmake -G generator
...
答案 2 :(得分:2)
这不是我得到的,当我运行相同的命令时,cmake将寻找一个gcc编译器/ make实用程序。如果未正确设置PATH,则会失败,例如:
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!
当gcc / mingw在路径中时,一切正常。那么您能提供有关PATH变量或CMAKE版本的更多信息吗?
答案 3 :(得分:0)
您需要在Generate阶段设置Generator,以便将其写入缓存。 您只需为一次配置运行一次此命令
cmake .. -DCMAKE_GENERATOR:INTERNAL =忍者
这会将Ninja配置为默认生成器。
稍后您可以简单地运行
cmake ..
它将使用忍者生成器作为默认
您可以在Running CMake from the command line
下了解更多信息从命令行运行cmake时,可以指定要在缓存中设置值的cmake命令行选项。这是通过命令行上的-DVARIABLE:TYPE = VALUE语法完成的。这对于非交互式夜间测试版本很有用。