检查是不是从 CMake 生成 Visual Studio 解决方案或 Makefile

Posted

技术标签:

【中文标题】检查是不是从 CMake 生成 Visual Studio 解决方案或 Makefile【英文标题】:Check if generating a Visual Studio solution or Makefile from CMake检查是否从 CMake 生成 Visual Studio 解决方案或 Makefile 【发布时间】:2014-11-10 03:41:37 【问题描述】:

如何在我的 CMakeLists.txt 中知道我是在生成 Visual Studio 解决方案还是 Makefile?

我需要像这样将外部项目添加到解决方案中:

INCLUDE_EXTERNAL_MSPROJECT(cs-tests $CMAKE_CURRENT_SOURCE_DIR/cstests/cstests.csproj)

但我只想在调用时这样做

cmake .. -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 12 2013"

当我打电话时不是:

cmake -G "NMake Makefiles" ..

【问题讨论】:

【参考方案1】:

生成器的名称存储在CMAKE_GENERATOR 中。它应该包含-G 选项给出的确切字符串。

MSVC 变量也应设置为 TRUEMSVC12MSVC_IDE 也应设置为(尽管目前我无法从 the documentation 确认。)

【讨论】:

请注意,MSVC 最初没有设置 - 它可能是在调用 project 之后设置的。同时,CMAKE_GENERATOR 始终设置在 CMakeLists.txt 内 - 设置为诸如“Visual Studio 15 2017 Win64”之类的字符串。这很有用,因为设置 CMAKE_TOOLCHAIN_FILE 应该在调用 project 之前完成,但可能只在 Windows 上;例如对于 vcpkg.cmake。 MSVC 变量并不总是被定义,我建议匹配 "if (CMAKE_GENERATOR MATCHES "Visual Studio")"【参考方案2】:

即使生成器不是Visual Studio(例如Windows 上的Ninja),也可以设置CMake MSVC 变量。

要检查 CMake 生成器是否为 Visual Studio(即 msbuild),请执行以下操作:

if (CMAKE_GENERATOR MATCHES "Visual Studio")
    # Do Visual Studio specific stuff
else()
    # Other stuff
endif()

【讨论】:

以上是关于检查是不是从 CMake 生成 Visual Studio 解决方案或 Makefile的主要内容,如果未能解决你的问题,请参考以下文章

CMake 与 Visual Studio 2019 的构建工具(只是 CLI 而不是 IDE)

在 Visual Studio 2017 中使用 Cmake 构建 ssh.dll

从 Visual Studio 文件构建动态库

使用 CMake 生成 Visual Studio 2017 项目

使用 CMake 生成 Visual Studio 2015 Makefile Project (GDB)

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案