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

hgb9j2n6  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(253)

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

这是我现在使用的命令。

cmake -G "Unix Makefiles" .

"我希望是这样"

cmake .

在安装了VC和自定义工具链的Windows上运行时。
我希望能够在CMakeLists.txt文件中设置生成器。
"也许就像这样"

set(CMAKE_GENERATOR "Unix Makefiles")
bz4sfanl

bz4sfanl1#

下面是我的工作-创建一个名为PreLoad.cmake的文件在您的项目目录中包含以下内容:
set (CMAKE_GENERATOR "Unix Makefiles" CACHE INTERNAL "" FORCE)

8i9zcol2

8i9zcol22#

在我看来,如果在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)时,将使用 default 生成器。但是,变量CMAKE_GENERATOR存储该高速缓存中。因此,如果您以后重新运行cmake ../source,它将使用缓存中变量CMAKE_GENERATOR中指定的生成器。
不过,这肯定不是最优雅的解决方案;- )也许可以使用一个批处理文件,它将为用户实际执行cmake -G generator...

pkwftd7m

pkwftd7m3#

这不是我得到的,当我运行相同的命令时,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在路径中时,一切都正常。2所以你能提供更多关于PATH变量或CMAKE版本的信息吗?

yyyllmsg

yyyllmsg4#

您需要在“生成”阶段设置生成器,以便将其写入该高速缓存。
-DCMAKE_GENERATOR:内部=忍者
这会将Ninja配置为默认生成器。
稍后您只需运行
可以制作..
它将使用忍者生成器作为默认值
您可以在Running CMake from the command line下阅读更多信息
从命令行运行cmake时,可以为cmake指定命令行选项,以设置该高速缓存中的值。这是通过命令行上的-DVARIABLE:TYPE=VALUE语法完成的。这对于非交互式的夜间测试构建非常有用。

ubbxdtey

ubbxdtey5#

CMake 3.19引入了一个新特性-预置。因此,要自动选择合适的发生器,您可以在CMakePresets.json中指定它的名称。
这些文件的完整说明可从以下网址获得:https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html

相关问题