Попытка собрать оболочки C # для RDKit с помощью Docs из / Code / JavaWrappers / csharp_wrapper - PullRequest
0 голосов
/ 11 мая 2019

Я пытался создать оболочки C # для RDKit, но, к сожалению, я продолжаю преодолевать препятствия.

Есть две сборки, на которые я смотрел. Я документирую первый здесь. Другое можно найти здесь: ( Попытка собрать оболочки C # для RDKit с помощью build.bat из bp-kelley / rdkit-csharp )

Документы из RDKit / Code / JavaWrappers / csharp_wrapper

Первый найден в https://github.com/rdkit/rdkit.

Оболочки C # с инструкциями по сборке находятся в ./Code/JavaWrappers/csharp_wrapper, найденном по адресу: https://github.com/rdkit/rdkit/tree/master/Code/JavaWrappers/csharp_wrapper

Моя первая попытка скомпилировать используемые обертки, пытаясь собрать их. После этого README: https://github.com/rdkit/rdkit/blob/master/Code/JavaWrappers/csharp_wrapper/README

Для сборки на Windows:

Поскольку cmake ничего не знает о C #, есть несчастный ручной шаг, участвующий в этом.

  • Убедитесь, что переменная конфигурации cmake Для RDK_BUILD_SWIG_CSHARP_WRAPPER установлено значение ON.
  • Запустите cmake, чтобы сгенерировать файл решения и открыть его в Visual Студия.
  • Выберите опцию, чтобы добавить существующий проект и добавить $ RDBASE / Code / JavaWrappers / csharp_wrapper / RDKit2DotNet.csproj
  • Щелкните правой кнопкой мыши на добавленном проекте (с именем RDKit2DotNet) и добавьте зависимость от RDKFuncs (это проект, который создает C ++ dll, что нужно проекту C #)
  • Сборка проекта RDKit2DotNet.

Ваш каталог бинов ($ RDBASE / Code / JavaWrappers / csharp_wrapper / bin / Release, если вы сделали Выпуск сборки) теперь содержит две библиотеки DLL: - RDKFuncs.dll - это библиотека C ++, содержащая функциональность RDKit - RDKit2DotNet.dll содержит оболочку C #. Чтобы использовать оболочки в ваших собственных проектах, вы должны скопировать обе библиотеки в свой проект каталог и добавить ссылку на RDKit2DotNet.dll

Каталог RDKitCSharpTest содержит пример тестового проекта и некоторые код, который очень просто использует функциональность оболочки.

Чтобы запустить cmake, я обновил CMakeLists.txt, чтобы сообщить ему, как найти swig и установить RDK_BUILD_SWIG_CSHARP_WRAPPER ON следующим образом:

cmake_minimum_required(VERSION 3.14)
project (GraphMolCSharp)

set(SWIG_FOUND TRUE) # This has been added
set(SWIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # This has been added
set(SWIG_EXECUTABLE swig.exe) # This has been added
set(SWIG_VERSION 4.0) # This has been added

find_package (SWIG) # This has been added
include (UseSWIG) # This has been added

include_directories( ${RDKit_ExternalDir} )

SET(RDK_BUILD_SWIG_CSHARP_WRAPPER ON) # This has been added

# find the gmcs executables on non-windows systems:
if(NOT WIN32)
  find_program(GMCS_EXE gmcs)
  if (NOT GMCS_EXE)
    MESSAGE ("gmcs (executable) is not found. Please add it to PATH and rerun cmake.")
    MESSAGE(FATAL_ERROR "Cannot find required executable gmcs")
  endif (NOT GMCS_EXE)
endif(NOT WIN32)


SET_SOURCE_FILES_PROPERTIES(GraphMolCSharp.i PROPERTIES CPLUSPLUS ON )

# Setup a few variables for environment-specific things
if(WIN32)
  ADD_DEFINITIONS("/W3 /wd4716 /bigobj")
  SET(PATH_SEP ";")
  SET(COPY_CMD xcopy ${COPY_SOURCE} ${COPY_DEST} /Y /I)
else()
  SET(PATH_SEP ":")
  SET(COPY_CMD cp -p ${COPY_SOURCE} ${COPY_DEST})
endif()

# Coax SWIG into playing nicely with Apple environments
if(APPLE)
  SET(CMAKE_SIZEOF_VOID_P 4)
endif(APPLE)

if(CMAKE_SIZEOF_VOID_P MATCHES 4)
  SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap")
else()
  if (WIN32)
    SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap" "-DSWIGWORDSIZE64" "-DSWIGWIN")
  else()
      SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap" "-DSWIGWORDSIZE64")
  endif()
endif()
SET(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_SOURCE_DIR}/swig_csharp )

if(RDK_BUILD_INCHI_SUPPORT)
  SET(CMAKE_SWIG_FLAGS "-DRDK_BUILD_INCHI_SUPPORT" ${CMAKE_SWIG_FLAGS} )
endif()
if(RDK_BUILD_AVALON_SUPPORT)
  SET(CMAKE_SWIG_FLAGS "-DRDK_BUILD_AVALON_SUPPORT" ${CMAKE_SWIG_FLAGS} )
endif()

FILE(GLOB SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../*.i")

# we added all source files, now remove the ones that we're not supporting in this build:
if(NOT RDK_BUILD_AVALON_SUPPORT)
LIST(REMOVE_ITEM SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../AvalonLib.i")
endif()

if(NOT RDK_BUILD_INCHI_SUPPORT)
LIST(REMOVE_ITEM SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../Inchi.i")
endif()

SET(SWIG_MODULE_RDKFuncs_EXTRA_DEPS ${SWIG_SRC_FILES} )

SWIG_ADD_LIBRARY(RDKFuncs TYPE MODULE LANGUAGE CSharp SOURCES GraphMolCSharp.i )


# it doesnt seem like the threading libs should need to be here, but
# as of Oct 2012 using boost 1.51 under at least ubuntu 12.04 we get a
# link error if they aren't there.
SWIG_LINK_LIBRARIES(RDKFuncs ${RDKit_Wrapper_Libs}
      ${RDKit_THREAD_LIBS} )

INSTALL(TARGETS RDKFuncs
        DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} )


if(NOT WIN32)
   # code adapted from the wrapper code for
   # GDCM: http://gdcm.svn.sf.net/viewvc/gdcm/trunk/Wrapping/Java/CMakeLists.txt?view=markup
   ADD_CUSTOM_COMMAND(
     OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/RDKit2DotNet.dll

     COMMAND ${CMAKE_COMMAND} -E make_directory swig_csharp

     ## 1. run this custom command only after swig has been run.
     COMMAND ${GMCS_EXE} -out:RDKit2DotNet.dll -t:library "swig_csharp/*.cs"
       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
     DEPENDS "${swig_generated_file_fullname}"
   )
   ADD_CUSTOM_TARGET(RDKFuncsDLL ALL
     DEPENDS RDKFuncs ${CMAKE_CURRENT_SOURCE_DIR}/RDKit2DotNet.dll
     COMMENT "building mono dll"
   )
endif(NOT WIN32)

Это создает много новых файлов и один .sln файл с именем GraphMolCSharp.sln. Затем я смог выполнить остальные шаги в README. Я открыл GraphMolCSharp.sln и добавил RDKit2DotNet.csproj как проект и добавил RDKfuncs как зависимость сборки. Но построение этого дало много ошибок в Visual Studio, начиная с:

Could not copy the file "D:\Desktop\rdkit-master\Code\JavaWrappers\csharp_wrapper\RDKFuncs.dll" because it was not found.   RDKit2DotNet            

Тогда много Unable to find x ошибок.

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

...