При добавлении исходных кодов в pybind11 и C ++ не указываются исходные ошибки. - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь заставить библиотеку, написанную на C ++, работать на python, используя pybind11.

Компиляция и сборка исходных файлов работает без ошибок, но получающиеся файлы выдают эту ошибку при установке с помощью pip.

 CMake Error at pybind11/tools/pybind11Tools.cmake:131 (add_library):
      Cannot find source file:

        ../project/variables.cpp

      Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
      .hpp .hxx .in .txx
    Call Stack (most recent call first):
      CMakeLists.txt:5 (pybind11_add_module)


    CMake Error at pybind11/tools/pybind11Tools.cmake:131 (add_library):
      No SOURCES given to target: project
    Call Stack (most recent call first):
      CMakeLists.txt:5 (pybind11_add_module)

Я следую за cmake_example , и я уверен, что файл существует. На самом деле, если я удаляю файл, ошибка возникает при запуске

python setup.py sdist

Структура папок выглядит следующим образом:

C++ project root folder
|-- C++ Project source files
|-- pybind folder
|------pybind11 source folder
|----------pybind.cpp file
|------pybind11 CmakeLists.txt
|------pybind11 Manifest.in

Это CMakeLists.txt, используемый pybind.

cmake_minimum_required(VERSION 2.8.12)
project(project)

add_subdirectory(pybind11)
pybind11_add_module(project
project/pybind.cpp
../project/variables.cpp
../project/instances.cpp
.
.
.
)

И исходные папки C ++ и pybind включены в файл Manifest.in. Кроме того, нет ошибок при обращении к файлу project/pybind.cpp.

Кроме того, этот метод сборки модуля python работал для меня пару месяцев назад в том же проекте. Я пробовал downgradein setuptools, pybind11 и cmake, но он не работает. Возможно, я ошибаюсь, но я думаю, что единственными шагами, которые я сделал, было добавление пары заголовков C ++ в проект и функции som в файле pybind.cpp.

1 Ответ

2 голосов
/ 26 марта 2019

Вы не должны использовать относительные пути, потому что местоположение дано относительно некоторых внутренних деталей CMake!

Используйте, например:

${CMAKE_PROJECT_DIR}/project/variables.cpp

Или лучше используйте результатFILE, поскольку он заполняет их правильно.

Даже project/bind.cpp должен быть относительным, но вам повезло в том смысле, что CMake знает об этой подпапке и вычисляет ее.Но не делайте этого, используйте FILE, чтобы выбрать их правильно (вы можете быть относительными там).

FILE(GLOB PYBIND_SRC
project/pybind.cpp
../project/variables.cpp
../project/instances.cpp
)

pybind11_add_module(project
${PYBIND_SRC}
)
...