c# - 使用 CMake 生成 C# 项目

我正在尝试在 Windows 上的现有 C++ CMake 代码库中生成 C# 项目。经过一番研究,我发现只有两个项目为 CMake 构建了自己的 CSharp 编译器: gdcm和 kde .

我都试过了。不幸的是,第一个未能生成 C# 项目。相反,它创建了一个包含 cs 文件的 VS C++ 项目,并且由于为链接器设置了 C++ 标志,构建总是失败并出现错误。在试用了他们提供的示例项目后,我想知道这是否可能是由于“Visual Studio 8 2005”代码生成器的限制?

第二个项目主要针对 Mono,所以我也没有成功。

有没有人在使用其中一个 CMake 模块或其他东西构建 C# 项目方面有过积极的经验?

最佳答案

截至 CMake 3.8.2 , CMake 正式支持 CSharp 项目生成。

要使用 CMake 构建默认的 Visual Studio 2017 生成的 C#/WPF 项目,请创建一个 CMakeList.txt 文件,如下所示。

  • 项目声明

      project(Example VERSION 0.1.0 LANGUAGES CSharp)
    
  • 包含 CMake CSharpUtilities如果您打算使用 WPF 或其他设计器属性。

      include(CSharpUtilities)
    
  • 添加所有csxamlsettingsproperties

      add_executable(Example
          App.config
          App.xaml
          App.xaml.cs
          MainWindow.xaml
          MainWindow.xaml.cs
    
          Properties/AssemblyInfo.cs
          Properties/Resources.Designer.cs
          Properties/Resources.resx
          Properties/Settings.Designer.cs
          Properties/Settings.settings)
    
  • 链接设计器文件、xaml 文件和其他属性文件及其对应的 cs 文件

      csharp_set_designer_cs_properties(
          Properties/AssemblyInfo.cs
          Properties/Resources.Designer.cs
          Properties/Resources.resx
          Properties/Settings.Designer.cs
          Properties/Settings.settings)
    
      csharp_set_xaml_cs_properties(
          App.xaml
          App.xaml.cs
          MainWindow.xaml
          MainWindow.xaml.cs)
    
  • 将应用程序 App.xaml 属性文件设置为程序入口点(如果项目是 WPF 项目)

      set_property(SOURCE App.xaml PROPERTY VS_XAML_TYPE "ApplicationDefinition")
    
  • 设置其他csproj文件标志

      set_property(TARGET Example PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")
      set_property(TARGET Example PROPERTY WIN32_EXECUTABLE TRUE)
      // ...
    
  • 添加库

      set_property(TARGET Example PROPERTY VS_DOTNET_REFERENCES
          "Microsoft.CSharp"
          "PresentationCore"
          "PresentationFramework"
          "System"
          "System.Core"
          "System.Data"
          "System.Data.DataSetExtensions"
          "System.Net.Http"
          "System.Xaml"
          "System.Xml"
          "System.Xml.Linq"
          "WindowsBase")
    

有关工作的 WPF 示例,请参阅 https://github.com/bemehiser/cmake_csharp_example

对于 WinForms例如,见 this answer .

https://stackoverflow.com/questions/2074144/

相关文章:

ios - React-native:如何从 Windows 构建 ios

macos - xcode4:链接器错误:找不到选项的目录

java - eclipse 中 "Build Automatically"选项的用途

linux - 使用make构建后的.d文件是什么

ios - Xcode 8 无法存档 "Command/usr/bin/codesign faile

java - 如何在命令行中编译多个java源文件

java - Maven 编译器插件总是将一组源检测为 "stale"

.net - 复制本地如何工作? log4net.dll 没有被复制到 MyProject 输出目录

c# - 如何强制 VS 2010 跳过未更改的项目的 "builds"?

jenkins - 使用 H/1 * * * * 每分钟运行一次 Jenkins 作业