Написание CMake для подключения пользовательской библиотеки c ++ с pybind11 - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть настройка проекта, подобная этой:

root
|
src__ init.py
            Nameofwraper.cpp
|
lib___ __pybind11
                |

                bunch of files
                include__
                        |
                        pybind11.h
        __my_c++_library
                |
                |
                __include
                        | 
                        my_c++_library.lib
                        my_c++_library.h

Я пытаюсь написать оболочку для своей библиотеки C ++, чтобы я мог использовать ее в Python (используя Pybind11). У меня проблемы с записью моего файла CMake для этого. Я не могу использовать классы и методы этих классов в моем NameofWraper.cpp.
Я пытался сделать что-то вроде этого:

cmake_minimum_required(VERSION 3.11.0)

project(translator)

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "E:/Boost/boost_1_72_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "E:/Boost/boost_1_72_0/stage/lib")

find_package( Boost REQUIRED )

add_subdirectory(my_lib) #my lib uses CMake to create .lib file

add_subdirectory(pybind11) 



set(SOURCE_DIR "src/my_lib_python")
include_directories(${SOURCE_DIR})
add_executable(MyTranslator "${SOURCE_DIR}/translator.cpp")
target_link_libraries(MyTranslator my_lib.lib)
pybind11_add_module(translator ${SOURCES} "${SOURCE_DIR}/translator.cpp")

и что-то вроде этого:

cmake_minimum_required(VERSION 3.11.0)

project(translator)

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "E:/Boost/boost_1_72_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "E:/Boost/boost_1_72_0/stage/lib")

find_package( Boost REQUIRED )
set_property(TARGET my_lib.lib PROPERTY POSITION_INDEPENDENT_CODE ON)
include_directories('my_lib/include')
add_library(my_lib "${SOURCE_DIR}/my_lib/debug") #the directory where my_lib.lib file is
include_directories('my_lib_build')

add_subdirectory(pybind11)

set(SOURCE_DIR "src/my_lib_python")
include_directories(${SOURCE_DIR})
add_executable(MyTranslator "${SOURCE_DIR}/translator.cpp")
target_link_libraries(MyTranslator my_lib.lib)
pybind11_add_module(translator ${SOURCES} "${SOURCE_DIR}/translator.cpp")

но когда я пытаюсь включить любой класс из my_lib, я получаю ошибку компоновки. Что я делаю неправильно? извините 4 длинный пост.

...