summaryrefslogtreecommitdiffstats
path: root/Tests/CSharpLinkFromCxx/CMakeLists.txt
diff options
context:
space:
mode:
authorRobert Dailey <rcdailey@gmail.com>2018-02-05 21:43:25 (GMT)
committerRobert Dailey <rcdailey@gmail.com>2018-02-23 14:53:17 (GMT)
commit076a356cd1972a149898fdba77d1dd83981447b4 (patch)
treeb0ea4574fba9ccb786b699973f94e611f2f70fd3 /Tests/CSharpLinkFromCxx/CMakeLists.txt
parentebf0a0827992be5cc03e530f9dc06bd1d05c1aa6 (diff)
downloadCMake-076a356cd1972a149898fdba77d1dd83981447b4.zip
CMake-076a356cd1972a149898fdba77d1dd83981447b4.tar.gz
CMake-076a356cd1972a149898fdba77d1dd83981447b4.tar.bz2
VS: Support C# project references
When specifying a pure C# target in the `target_link_libraries()` call to another C++ target, a `<ProjectReference>` was setup for it (we wanted this) but also a corresponding `.lib` was added under `<AdditionalDependencies>` (we didn't want this). This change introduces a check that prevents `.lib` linker options from being used when the corresponding target for that library is a C# target. Fixes: #17678
Diffstat (limited to 'Tests/CSharpLinkFromCxx/CMakeLists.txt')
-rw-r--r--Tests/CSharpLinkFromCxx/CMakeLists.txt19
1 files changed, 19 insertions, 0 deletions
diff --git a/Tests/CSharpLinkFromCxx/CMakeLists.txt b/Tests/CSharpLinkFromCxx/CMakeLists.txt
new file mode 100644
index 0000000..9a1a993
--- /dev/null
+++ b/Tests/CSharpLinkFromCxx/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Take a C# shared library and link it to a managed C++ shared library
+cmake_minimum_required(VERSION 3.10)
+project (CSharpLinkFromCxx CXX CSharp)
+
+add_library(CSharpLibrary SHARED UsefulCSharpClass.cs)
+
+# 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})
+
+# The C# project is a dependency of the C++/CLI project
+add_library(ManagedCppLibrary SHARED UsefulManagedCppClass.cpp UsefulManagedCppClass.hpp)
+target_compile_options(ManagedCppLibrary PRIVATE "/clr")
+target_link_libraries(ManagedCppLibrary PUBLIC CSharpLibrary)
+
+# Main executable for the test framework
+add_executable(CSharpLinkFromCxx CSharpLinkFromCxx.cs)
+target_link_libraries(CSharpLinkFromCxx PRIVATE ManagedCppLibrary)