cmake:在CMakeLists.txt中选择一个生成器

时间:2012-06-29 22:41:41

标签: cmake

我想强制CMake 在CMakeLists.txt中使用“Unix Makefile”生成器

这是我现在使用的命令。

cmake -G "Unix Makefiles" .

我希望如此。

cmake .

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

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

也许是这样的。

set(CMAKE_GENERATOR "Unix Makefiles")

4 个答案:

答案 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语法完成的。这对于非交互式夜间测试版本很有用。