检查是不是从 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
变量也应设置为 TRUE
,MSVC12
和 MSVC_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
使用 CMake 生成 Visual Studio 2017 项目