Как бы я создал C # DLL с CMake? - PullRequest
0 голосов
/ 07 марта 2019

Я впервые использую CMake для создания C # DLL. Этот CMake вписывается в больший рабочий процесс. В противном случае я использую Visual Studio 2017 для разработки и отладки.

Пока что мой CMakeLists.txt выглядит примерно так: продукт просмотра, вырезания и вставки из нескольких примеров, которые я смог найти.

cmake_minimum_required(VERSION 3.8)
project("galapagos" CSharp)

add_executable("galapagos"
    tortoise1.cs
    tortoise2.cs
    tortoiseForm.cs
    packages.config
    runTortoiseReport.cs
    ... etc ...
    tortoiseTest.cs)

set_property(TARGET "galapagos" PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "v4.6.1")
set_property(TARGET "galapagos" PROPERTY WIN32_EXECUTABLE FALSE)
set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)
set_property(TARGET "galapagos" PROPERTY VS_DOTNET_REFERENCES
        "Microsoft.CSharp"
        "PresentationCore"
        "PresentationFramework"
        "System"
        "System.Core"
        "System.Data"
        "System.Data.DataSetExtensions"
        "System.Windows.Forms"
        "System.Net.Http"
        "System.Xaml"
        "System.Xml"
        "System.Xml.Linq"
        "WindowsBase"
        .. etc ...
        "C:/galapagos/galapagos.dll"
)

Далее, попытка построить приводит к изменениям в моем файле .csprog, где

  • форма исчезает с соответствующими ошибками сборки из формы № дольше присутствует
  • тип вывода изменяется с Class Library на Console Application

Исчезающую форму иногда можно заставить снова появиться, исключив соответствующий файл из проекта, а затем добавив его снова.

DLL не создается. Изменение файла .csprog, где приложение теперь является Console Application, в лучшем случае странное.

По-видимому,

set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE BeefChowMein)

имеет тот же эффект, что и

set_property(TARGET "galapagos" PROPERTY VS_CONFIGURATION_TYPE ClassLibrary)

, что, возможно, объясняет, что ClassLibrary не понимается CMake и считается значением по умолчанию ConsoleApplication.

Поскольку процесс сборки, очевидно, потерял определение формы, у меня теперь есть целый ряд ошибок, таких как

      tortoise1.cs(16,25): error CS1061: 'TortoiseForm' does not contain a definition for 'carapace' and no accessible
    extension method 'carapace' accepting a first argument of type 'TortoiseForm' could be found (are you missing a using directive or an assembly reference?) [......csproj]

где проект иначе построен правильно за VS секунд до.

Есть ли проблемы сосуществования с VS и CMake?

Что мне все еще не хватает?

1 Ответ

0 голосов
/ 05 апреля 2019

Пожалуйста, добавьте ADD_LIBRARY вместо использования add_executable.

ADD_LIBRARY(${PROJECT_NAME} SHARED
    ..sources..
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...