创建C#和C++/使用CMake(CMake瞄准visual studio)在同一解决方案中执行CLR项目

创建C#和C++/使用CMake(CMake瞄准visual studio)在同一解决方案中执行CLR项目,c#,visual-studio,cmake,c++-cli,C#,Visual Studio,Cmake,C++ Cli,我想使用CMake在MSVC中创建一个解决方案,它有两个项目(在CMake词汇表中,一个是C#executive,一个是C++/CLR库) 我该怎么做?我发现的所有例子都是关于CMake(C++或C语言)中的一种项目。 澄清: 如果我想使用CMake创建一个C++/CLR项目,我可以编写如下代码: cmake_minimum_required (VERSION 3.5) project (TestCppClr) if (NOT MSVC) message(FATAL_ERROR "T

我想使用CMake在MSVC中创建一个解决方案,它有两个项目(在CMake词汇表中,一个是C#executive,一个是C++/CLR库)

我该怎么做?我发现的所有例子都是关于CMake(C++或C语言)中的一种项目。 澄清:

如果我想使用CMake创建一个C++/CLR项目,我可以编写如下代码:

cmake_minimum_required (VERSION 3.5)

project (TestCppClr)

if (NOT MSVC)
    message(FATAL_ERROR "This CMake files only wirks with MSVC.")
endif(NOT MSVC)


ADD_EXECUTABLE(testCppClr "${CMAKE_SOURCE_DIR}/main.cpp")
set_target_properties(testCppClr PROPERTIES COMMON_LANGUAGE_RUNTIME "")
如果我想创建一个以C#为目标的项目,我可以这样写:

cmake_minimum_required (VERSION 3.5)

project(Example VERSION 0.1.0 LANGUAGES CSharp)

if (NOT MSVC)
    message(FATAL_ERROR "This CMake files only wirks with MSVC.")
endif(NOT MSVC)


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)
我找不到任何方法来组合这两个CMake文件,因此我可以用C++/CLR创建一个可执行文件,用C#创建另一个项目


有什么方法可以做到这一点吗?

您当然可以在同一个CMake项目中同时使用和C-只要在调用
project()
时同时启用这两种语言(C++和C)


请注意,您应该使用CMake 3.8或更高版本来获得对C#的完整CMake支持。此外,您的C#示例似乎缺少一些用于CSharp目标的基本CMake命令,如图所示。您应该能够根据需要将这些命令添加到相同的
CMakeLists.txt
文件中,以修改C源文件和C目标文件的属性。

您当然可以在同一个CMake项目中同时使用这两个命令-只要在调用
project()
时同时启用两种语言(C++和C)


请注意,您应该使用CMake 3.8或更高版本来获得对C#的完整CMake支持。此外,您的C#示例似乎缺少一些用于CSharp目标的基本CMake命令,如图所示。您应该能够根据需要将这些命令添加到相同的
CMakeLists.txt
文件中,以修改C源文件和C目标文件的属性。

如何定义“TestCPPCRL”是C++/clr,“Example”是C应用程序?在这段代码中,它们似乎彼此相似。@mans好吧,你可以给它们起个更详细的名字,告诉你和其他开发人员它们是什么。C#target name
示例
非常模糊,因此您可以将其更改为
MyCSharpExecutable
或类似的内容以使其更加清晰。这只是为了你自己的理智;CMake是智能的,它将根据您提供给
add\u executable
命令的源文件的文件扩展名推断要构建什么。因此,源代码文件将包含代码> > CPP< /Cord>文件扩展名,将被内置到C++库/可执行文件中,并且<>代码> Cs<代码>文件将被内置到C语言库/执行程序中。这是有道理的。Cmalke了解文件扩展名并为其使用适当的项目类型。如何定义“TestCPPCRL”是C++/clr,“Example”是C#应用程序?在这段代码中,它们似乎彼此相似。@mans好吧,你可以给它们起个更详细的名字,告诉你和其他开发人员它们是什么。C#target name
示例
非常模糊,因此您可以将其更改为
MyCSharpExecutable
或类似的内容以使其更加清晰。这只是为了你自己的理智;CMake是智能的,它将根据您提供给
add\u executable
命令的源文件的文件扩展名推断要构建什么。因此,源代码文件将包含代码> > CPP< /Cord>文件扩展名,将被内置到C++库/可执行文件中,并且<>代码> Cs<代码>文件将被内置到C语言库/执行程序中。这是有道理的。Cmalke了解文件扩展名并为其使用适当的项目类型。
cmake_minimum_required (VERSION 3.5)

# Enable both C++ and C# languages.
project (TestCSharpAndCppClr VERSION 0.1.0 LANGUAGES CXX CSharp)

if(NOT MSVC)
    message(FATAL_ERROR "This CMake files only works with MSVC.")
endif(NOT MSVC)

# Create your C++/CLI executable, and modify its properties.
add_executable(testCppClr "${CMAKE_SOURCE_DIR}/main.cpp")
set_target_properties(testCppClr PROPERTIES COMMON_LANGUAGE_RUNTIME "")

# Create your C# executable.
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)