【问题标题】: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" ..

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多