HomeBlogMagic

Cmake Export C# project für C++ mit RegisterForComInterop

Meist sind Projekte auf eine Sprache wie C/C++ oder C# festgelegt. Für letzteres wird meist eine Solution von Visual Studio genommen.

Manchmal kommt es aber vor dass die Sprachen sich überschneiden, und ein gegenseitiger Austausch gefunden werden muss.
Da ich meine Projekte fast ausschließlich mit Cmake erstellen lasse, war es für mich nur folgerichtig eine Möglichkeit zu finden C/C++ und C# in eine Cmake generierte Solution zu packen.

Die einzelnen C/C++ Projekte anzulegen ist keine schwere Aufgabe, was aber etwas gedauert hat waren die C# Projekte. Dies benötigen bei mir das Flag: Register for COM interop.

Die Lösung wie das funktioniert soll diese einfache Solution mit einem C#-Projekt zeigen:

project(ExampleProjectLibrary CSharp CXX)

set(PROJECT_NAME ProjectLibrary)

set(SOURCE_FILES
  src/ProjectLibrary.cs
)

include(CSharpUtilities)

add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})

set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1") 

set_property(TARGET ${PROJECT_NAME} PROPERTY VS_DOTNET_REFERENCES 
  "Microsoft.CSharp" 
  "System" 
  "System.Core" 
)

set_target_properties(${PROJECT_NAME} PROPERTIES VS_GLOBAL_RegisterForComInterop "true")