ОРИГИНАЛЬНЫЙ ПОСТ:
Я пытаюсь скомпилировать простой «привет мир» для вызова из python (anaconda3), выполненный с использованием CMake.
Я получаю:
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
hello.cpp:
#include <boost/python.hpp>
#include <string>
std::string greet(std::string name){
return std::string("Hello, ") + name;
}
BOOST_PYTHON_MODULE(hello){
using namespace boost::python;
def("greet", greet, "Prepends a greeting to the passed name");
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
find_package(PythonLibs 3 REQUIRED)
set(BOOST_PYTHONLIB python-py36)
find_package(Boost COMPONENTS ${BOOST_PYTHONLIB})
python_add_module(hello hello.cpp)
target_include_directories(hello PUBLIC ${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
target_link_libraries(hello ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
К сожалению, я пытаюсь использовать anaconda3, поэтому на основе некоторых других сообщений я добавилследующие аргументы, когда вызывается CMake:
-DPYTHON_LIBRARY=/Users/chris/anaconda3/lib
-DPYTHON_INCLUDE_DIR=/Users/chris/anaconda3/include
Но я получаю ту же ошибку с этими аргументами или без них.Я все еще относительно новичок в этом, поэтому извиняюсь, если это что-то тривиальное.
Я использую Mojave 10.14.6 и делаю это через CLion.
ОБНОВЛЕНИЕ:
Как предлагается в этом сообщении, редактирование пакета находит в
FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)
Кажется, что помогает - он находит PythonLibs, но не правильный.
Could NOT find PythonLibs: Found unsuitable version "2.7.10", but required is at least "3" (found /usr/lib/libpython2.7.dylib)
Я знаю, что могу (в принципе) сделать:
set(PYTHON_LIBRARIES /Users/chris/anaconda3/lib/libpython3.6m.dylib)
Как обсуждено в комментариях, в котором найдена правильная библиотека, но, как обсуждалось в предыдущем посте, позже выдает мне ошибкуUnknown CMake command "PYTHON_ADD_MODULE".
Согласно этому посту, «причина этого, по-видимому, в том, что эта функция предоставляется FindPythonLibs.cmake, которая загружается с помощью find_package (Pythonlibs) и, следовательно, если она не используется для размещенияPythonLibs, эта функция не может быть вызвана ".
Итак, похоже, что путь к /Users/chris/anaconda3/lib/libpython3.6m.dylib
должен быть каким-то образом добавлен в поиск FindPackage ().Кто-нибудь знает, как это сделать?