CMake 3.11不生成Visual Studio解决方案文件问题咨询
问题根源:CMake指令顺序错误导致的隐性行为变化
我一眼就揪出问题所在了——你的CMakeLists.txt指令顺序完全搞反了!这就是为啥CMake 3.9能凑活工作,但3.11直接罢工的核心原因。
核心问题
cmake_minimum_required(VERSION 3.11)这条指令必须是CMakeLists.txt里的第一条有效代码(注释除外)。它的作用是告诉CMake启用对应版本的兼容规则,所有后续指令都会基于这个版本的逻辑运行。你现在把它放在project()和enable_language(CSharp)之后,相当于让CMake先按默认旧逻辑初始化项目,再试图切换到3.11的规则,这在3.11版本里会触发未定义行为,尤其是对CSharp这种需要特定版本支持的语言来说,直接导致项目生成逻辑没正确初始化,自然出不了.sln文件。
修正后的CMakeLists.txt
把指令顺序调整成下面这样就行:
cmake_minimum_required(VERSION 3.11) project(MyProject) enable_language(CSharp) add_custom_target(${PROJECT_NAME} SOURCES ...)
为什么3.9能工作?
旧版本的CMake对指令顺序的容错性更高,哪怕你把cmake_minimum_required放在后面,它也会尝试按旧逻辑兼容处理。但从3.11开始,CMake严格执行了指令顺序的规范要求——毕竟这条指令的设计初衷就是要先声明版本,再执行后续操作。这种属于对规范行为的强化,通常不会在更新日志里专门大篇幅提及,很容易被忽略。
调整顺序后,用CMake 3.11重新跑一遍配置流程,应该就能正常生成VS2017的解决方案文件了。
内容的提问来源于stack exchange,提问作者Gert-Jan
相关产品推荐
相关产品推荐

