使用CMake生成C#项目
我正试图在Windows上现有的C ++ CMake代码库中生成一个C#项目。 经过一番研究,我只能find两个为CMake构build自己的CSharp编译器的项目: gdcm和kde 。
我尝试了他们两个。 不幸的是,第一个未能生成一个C#项目。 相反,它创build了一个包含cs文件的VS C ++项目,并且由于为链接器设置了C ++标记,所以构build总是失败并出错。 在对他们提供的示例项目进行实验之后,我想知道这是否是由于“Visual Studio 8 2005”代码生成器的限制?
第二个项目主要针对莫诺,所以我也没有成功。
有没有人有积极的经验,build设使用这些CMake模块或其他东西之一的C#项目?
CMake 2.8.9以上,像这样include_external_msproject
添加一个TYPE
参数:
include_external_msproject( MyProject MyProject.csproj TYPE FAE04EC0-301F-11D3-BF4B-00C04F79EFBC)
这可以让你指定项目是C#(上面的魔术GUID),否则事情就会纠结( 参见文档 )。
您可能仍然想要使用.csproj
文件中提到的configure_file
模板方法来获取正确的path,除非您直接构build到源代码树中。
好消息是,你可以在.csproj.template
文件中通配符C#文件,如下.csproj.template
:
<ItemGroup> <Compile Include="${DOS_STYLE_SOURCE_DIR}\**\*.cs" /> </ItemGroup>
而且在CMakeLists.txt
需要这样的东西来将CMake的unix风格的正向path分隔符转换为Windows风格的反斜杠,否则它将编译这些文件,但是它们不会在Visual Studio中显示为项目中的链接:
FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" DOS_STYLE_SOURCE_DIR)
那只是:
CONFIGURE_FILE(MyProject.csproj.template MyProject.csproj)
在您的CMakeLists.txt
,将模板文件configuration为具有正确通配符path的实际项目文件。
HTH。
为了万一任何人仍然在寻找这方面的信息,真的没有理由用CMake来生成C#项目,它们是通过devise跨平台的。 在Linux上,C#项目通常使用MonoDevelop进行pipe理,可以从Visual Studio读取.csproj文件。 这应该能够跨平台开发C#项目。 唯一的潜在问题是,如果你有本地c ++项目与c#项目混合在一起(例如在C#中用c ++编写的后端),在这种情况下,只需把cmake复制到你的.csproj文件就好像它们是数据一样好好去。 CMake旨在将您的构build环境设置为跨平台。 这对于c ++来说真的很方便,其中代码的构build方式与linux上的完全不同,而不是windows上(或其他操作系统),但对于可以执行跨平台的c#来说是不必要的,并且由于devisemono团队的决定,可以build立跨平台。 CMake确实提供了一些很好的工具来自动化事物,但是这些function的大部分都可以通过正确configuration的.csproj文件来恢复。 无论如何,我知道这个问题已经过去了一年多了,但是当我正在查找如何做到这一点时,这是我偶然发现的顶级search结果之一。 我已经做出了这个认识。
从CMake 3.8.2开始 ,CSharp项目生成由CMake正式支持。
要使用CMake生成默认的Visual Studio 2017生成的C#/ WPF项目,请按如下所示创build一个CMakeList.txt文件。
-
项目宣言
project(Example VERSION 0.1.0 LANGUAGES CSharp)
-
如果您打算使用WPF或其他devise器属性,请包括CMake
CSharpUtilities
。include(CSharpUtilities)
-
添加所有
cs
,xaml
,settings
,properties
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)
-
链接devise器文件,
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")
有关工作示例,请参阅https://github.com/bemehiser/cmake_csharp_wpf_example
我终于能够使用第二个c#模块 – kde生成一个有效的解决scheme。 虽然,cmake创build了一些.vcproj文件,而我期望获得.csproj,但我想这是“Visual Studio 8 2005”生成器可以提供的唯一forms。
不过,我能够成功地构build这个解决scheme,并生成可执行文件和DLL库。
您可以使用Visual Studio创build一个项目,然后将其分开,并使用configure_file
命令(必须使用源列表生成一些XML)并使用include_external_msproject
将其添加到解决scheme(对于其他生成器你需要创build自定义目标来手动运行msbuild; cmake似乎还不支持这样做)。 该项目相当简单,所以应该可以做到这一点。