Makefile Boost.Python для CMakLists.txt - PullRequest
       25

Makefile Boost.Python для CMakLists.txt

0 голосов
/ 05 сентября 2018

Я написал несколько файлов C ++ для создания общей библиотеки, и вот мой Makefile

PYTHON_VERSION = 3.6
PYTHON_HOME_PATH = /Library/Frameworks/Python.framework/Versions
PYTHON_INCLUDE = $(PYTHON_HOME_PATH)/$(PYTHON_VERSION)

BOOST_INC = /usr/local/Cellar/boost/1.67.0_1/include
BOOST_LIB = /usr/local/Cellar/boost/1.67.0_1/lib
BOOST_PYTHON_LIB = /usr/local/Cellar/boost-python3/1.67.0_1/lib/


TARGET = main
EXTEND_FILE = main_ext

$(TARGET).so:$(TARGET).o
    g++ -shared depend.o -L$(BOOST_LIB) -L$(BOOST_PYTHON_LIB) -lboost_python3 `python3.6m-config --libs --ldflags` -o depend_ext.so
    g++ -shared depend.o $(TARGET).o -L$(BOOST_LIB) -L$(BOOST_PYTHON_LIB) -lboost_python3 `python3.6m-config --libs --ldflags` -o $(TARGET).so
    mv $(TARGET).so $(EXTEND_FILE).so

depend.o:depend.cpp
    g++ `python3.6m-config --include` -fPIC -c depend.cpp -O3 -std=c++11

$(TARGET).o:$(TARGET).cpp
    g++ `python3.6m-config --include` -fPIC -c depend.cpp $(TARGET).cpp -O3 -std=c++11

clean:
    rm *.so *.o

Makefile может генерировать файл .so. И мой CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(Simulator)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES depend.cpp depend.h main.cpp main.h)
add_executable(Simulator ${SOURCE_FILES})

set(Boost_INCLUDE_DIRS /usr/local/Cellar/boost/1.67.0_1/include)
set(Boost_LIBRARIES /usr/local/Cellar/boost/1.67.0_1/lib)
set(BOOST_PYTHON_LIB /usr/local/Cellar/boost-python3/1.67.0_1/lib/)

find_package(Boost COMPONENTS filesystem system date_time python REQUIRED)


message("--> Include dirs of boost: " ${Boost_INCLUDE_DIRS} )
message("--> Libs of boost: " ${Boost_LIBRARIES} )

find_package(PythonLibs 3.6 REQUIRED)
message("--> Include dirs of Python: " ${PYTHON_INCLUDE_DIRS} )
message("--> Libs of Python: " ${PYTHON_LIBRARIES} )

include_directories(
        ${Boost_INCLUDE_DIRS}
        ${PYTHON_INCLUDE_DIRS}
)

target_link_libraries(Simulator
        ${Boost_LIBRARIES}
        ${PYTHON_LIBRARIES}
        ${BOOST_PYTHON_LIB}
        )

Но запуск CMake выдает следующие ошибки

CMake Error at /usr/local/Cellar/cmake/3.10.2/share/cmake/Modules/FindBoost.cmake:1928 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.67.0

  Boost include path: /usr/local/include

  Could not find the following Boost libraries:

          boost_python3

Я хочу собрать его с Python3, и я уже установил boost.python3. Как я могу это исправить?

1 Ответ

0 голосов
/ 12 сентября 2018

Мне кажется, проблема в том, что Homebrew устанавливает boost_python в отдельный каталог (т. Е. /usr/local/Cellar/boost-python3/1.67.0_1/), который отличается от остальной части установки Boost (т. Е. /usr/local/Cellar/boost/1.67.0_1).

Я не на Mac, поэтому я не совсем уверен в фактической структуре каталогов и о том, сколько можно сделать с помощью символических ссылок (символьные ссылки на каталоги компонентов Boost Python обратно в основной установочный каталог Boost).

Итак, я собрал и установил (на Ubuntu Linux) из исходников последнюю версию Boost (1.68), используя

./bootstrap.sh --prefix=/bulk/workbench/boost/install --with-python=python3

Все компоненты оказались в каталогах include и lib в /bulk/workbench/boost/install. При условии, что во время настройки CMake, как в

cmake -DBoost_ROOT=/bulk/workbench/boost/install [path-to-my-project-source-dir]

и используя это в моем CMakeLists.txt

find_package(Boost COMPONENTS python REQUIRED)

удалось найти мой boost_python модуль.

По сути, если вы не можете изменить установку Homebrew, может быть проще создать собственный Boost.

...