我在cmake构建目录中并希望构建项目,但不知道cmake是否与-G Unix\ Makefile
或-G Ninja
一起运行。
现在我知道我可以对此无知并使用cmake --build .
,但是当我想提供其他选项cmake --build . -- SOMETHING
时,我应该知道是否应该提供gnumake或ninja选项。
作为可能的解决方案,我发现我可以检查是否存在Makefile
或build.ninja
文件。或者CMakeCache.txt
CMAKE_GENERATOR
中的grep。
修改:
在类似的问题here中,解释了可以使用-D
查询传递给cmake -LA -N
的cmake的值。但是这并没有列出-G
参数。
我想知道是否有更合适的方式(就像cmake -LA -N
而不是为变量值进行grepping)。
答案 0 :(得分:1)
您已经引用了两种可能的解决方案:
检查构建系统文件的存在。不是一般的解决方案,因为它只适用于某些生成器,但它可能适用于您的情况。这不适用于Visual Studio(例如,除非您自己解析Visual Studio文件),因为每个生成器版本都会创建相同的文件名。
Grep CMakeCache.txt for CMAKE_GENERATOR
。依赖于特定于平台的工具(grep)以及CMakeCache.txt的位置。在大多数情况下,两者都不是问题。
稍微修改第二个选项,使其更具可移植性,是将CMAKE_GENERATOR
缓存到另一个变量中:
set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERATOR" FORCE)
然后,当您使用cmake -L
时,USED_CMAKE_GENERATOR
将会显示。