소스 검색

Vs: allow CSharp targets to be linked to CXX targets

Fixes: #16755
Michael Stürmer 8 년 전
부모
커밋
51865fc67e

+ 0 - 4
Source/cmVisualStudio10TargetGenerator.cxx

@@ -3475,10 +3475,6 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
           ->TargetIsFortranOnly(dt)) {
       continue;
     }
-    if (csproj == this->ProjectType &&
-        !this->GlobalGenerator->TargetIsCSharpOnly(dt)) {
-      continue;
-    }
     this->WriteString("<ProjectReference Include=\"", 2);
     cmLocalGenerator* lg = dt->GetLocalGenerator();
     std::string name = dt->GetName();

+ 1 - 0
Tests/CMakeLists.txt

@@ -331,6 +331,7 @@ if(BUILD_TESTING)
 
   if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^89]|[89][0-9])")
     ADD_TEST_MACRO(CSharpOnly CSharpOnly)
+    ADD_TEST_MACRO(CSharpLinkToCxx CSharpLinkToCxx)
   endif()
 
   ADD_TEST_MACRO(COnly COnly)

+ 17 - 0
Tests/CSharpLinkToCxx/CMakeLists.txt

@@ -0,0 +1,17 @@
+# test if CSharp application correctly links
+# to managed C++ binary
+cmake_minimum_required(VERSION 3.9)
+project (CSharpLinkToCxx CXX CSharp)
+
+# we have to change the default flags for the
+# managed C++ project to build
+string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
+string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
+
+add_library(CLIApp SHARED cli.hpp cli.cpp)
+
+target_compile_options(CLIApp PRIVATE "/clr")
+
+add_executable(CSharpLinkToCxx csharp.cs)
+
+target_link_libraries(CSharpLinkToCxx CLIApp)

+ 10 - 0
Tests/CSharpLinkToCxx/cli.cpp

@@ -0,0 +1,10 @@
+#include "cli.hpp"
+
+using namespace System;
+
+namespace CLIApp {
+void MyCli::testMyCli()
+{
+  Console::WriteLine("#message from CLIApp");
+}
+}

+ 10 - 0
Tests/CSharpLinkToCxx/cli.hpp

@@ -0,0 +1,10 @@
+#pragma once
+
+namespace CLIApp {
+public
+ref class MyCli
+{
+public:
+  void testMyCli();
+};
+}

+ 16 - 0
Tests/CSharpLinkToCxx/csharp.cs

@@ -0,0 +1,16 @@
+using System;
+using CLIApp;
+
+namespace CSharpLinkToCxx
+{
+  internal class CSharpLinkToCxx
+  {
+    public static void Main(string[] args)
+    {
+      Console.WriteLine("#message from CSharpLinkToCxx");
+
+      var app = new MyCli();
+      app.testMyCli();
+    }
+  }
+}