CMake不';t设置C#项目的语言版本
我正在尝试使用CMake 3.16.3为Visual Studio 2017生成C#project,但在设置C#语言版本时遇到问题。 即使我在CMakeLists.txt文件的顶部指定它:CMake不';t设置C#项目的语言版本,c#,cmake,C#,Cmake,我正在尝试使用CMake 3.16.3为Visual Studio 2017生成C#project,但在设置C#语言版本时遇到问题。 即使我在CMakeLists.txt文件的顶部指定它: target_compile_options(<MyApp> PRIVATE "/langversion:latest") 在*.csproj文件中,它总是这样设置: set(CMAKE_CSharp_FLAGS "/langversion:latest") ... ... 生成文件夹中的文
target_compile_options(<MyApp> PRIVATE "/langversion:latest")
在*.csproj文件中,它总是这样设置:
set(CMAKE_CSharp_FLAGS "/langversion:latest")
...
...
生成文件夹中的文件。看起来是这样的:
set(CMAKE_CSharp_FLAGS "/langversion:latest")
最新的
我对CMake很陌生,它的文档也很复杂,所以我可能错过了一些步骤。或者这是CMake中的一个bug,有没有人有更好的解决方案
这是CMake的一个限制,最近才在3.17.0版中修复。
您需要安装CMake 3.17版,并从命令行生成解决方案
请参见CMake问题跟踪中的。问题出在Visual Studio 2017上。默认情况下,Visual Studio 2019根据框架版本确定C语言版本
tl;dr基本上只是升级到Visual Studio 2019我在下面找到了这个问题的答案(应使用默认值):
设置(CMAKE\u CSharp\u标志“/langversion:default”)
或者只需将属性VS_GLOBAL_LangVersion设置为8.0(从此):
设置\u属性(目标myLib属性与\u全局\u语言版本“8.0”)
你能提供一个简单的工作示例吗?一个单独的C#文件一个小的CMake文件就足够了。但据我所知,C#不是CMake支持的语言,我在gitlab中添加了示例项目。链接在问题的底部。谢谢你的提示!我将CMake从3.16.3更新为3.17.0,但同样的问题仍然存在。现在,无论我在CMAKE_CSharp_标志或在target_compile_选项中指定了什么,语言版本始终是最新的主要版本。您是否正在清除缓存,即在应用更改后从生成目录中删除CMakeCache.txtCMAKE\u CSharp\u标志
已缓存,否则不会更新。是的,我正在删除包含CMakeCache.txt文件的整个生成文件夹。刚刚测试了您的项目。对于csproj
文件中的当前状态,当您强制使用/LangVersion:latest
时,不会设置LangVersion
。如果我将其更改为/langversion:5
,请删除build文件夹并重新运行cmake命令,将添加一个带有5
的条目,因此一切似乎都如您所期望的那样适合我。我正在使用VisualStudio2019。我的cmake命令是cmake-S-B-G“Visual Studio 16 2019”
。有趣的是,当您设置/langversion:7
或更高版本时,
属性将消失,并将其设置为/langversion:“7或更高版本”
。我可以设置版本5和版本6,我试过了。