我想在CMakeLists.txt中强制使用"Unix Makefiles" 生成器。
这是我现在使用的命令。
cmake -G "Unix Makefiles" .
我希望它是这样的。
cmake .
在Windows上安装了VC和自定义工具链时,我期望能够在CMakeLists.txt
文件中设置生成器。
也许可以像这样。
set(CMAKE_GENERATOR "Unix Makefiles")
我想在CMakeLists.txt中强制使用"Unix Makefiles" 生成器。
这是我现在使用的命令。
cmake -G "Unix Makefiles" .
我希望它是这样的。
cmake .
在Windows上安装了VC和自定义工具链时,我期望能够在CMakeLists.txt
文件中设置生成器。
也许可以像这样。
set(CMAKE_GENERATOR "Unix Makefiles")
以下是我成功尝试过的方法- 在您的项目目录中创建一个名为 PreLoad.cmake 的文件,其内容如下:
set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)
在我的看法中,如果在CMakeLists.txt
中设置变量CMAKE_GENERATOR
,那么它似乎设置得太晚了。即使你在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
...
CMakeLists.txt
中设置所有配置。如果你还需要一个.bat
文件,那这有什么意义呢? - Royi