Vs: allow CSharp targets to be linked to CXX targets

Fixes: #16755
This commit is contained in:
Michael Stürmer 2017-06-20 16:14:45 +02:00
parent b7799f07d1
commit 51865fc67e
6 changed files with 54 additions and 4 deletions

View File

@ -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();

View File

@ -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)

View File

@ -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)

View File

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

View File

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

View File

@ -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();
}
}
}