Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake不';t设置C#项目的语言版本_C#_Cmake - Fatal编程技术网

CMake不';t设置C#项目的语言版本

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") ... ... 生成文件夹中的文

我正在尝试使用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")

...
...
生成文件夹中的文件。看起来是这样的:

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.txt
CMAKE\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,我试过了。