Boost python linking

я добавляю импульс.python для моей игры. Я пишу обертки для своих классов, чтобы использовать их в сценариях. Проблема в том, чтобы связать эту библиотеку с моим приложением. Я использую cmake построить систему.

теперь у меня есть простое приложение с 1 файлом и makefile для него:

PYTHON = /usr/include/python2.7

BOOST_INC = /usr/include
BOOST_LIB = /usr/lib

TARGET = main

$(TARGET).so: $(TARGET).o
    g++ -shared -Wl,--export-dynamic 
    $(TARGET).o -L$(BOOST_LIB) -lboost_python 
    -L/usr/lib/python2.7/config -lpython2.7 
    -o $(TARGET).so

$(TARGET).o: $(TARGET).cpp
    g++ -I$(PYTHON) -I$(BOOST_INC) -c -fPIC $(TARGET).cpp

и это работает. Он создает для меня файл "so", который я могу импортировать из python.

теперь вопрос: Как получить это для cmake?

я написал в main CMakeList.txt:

...
find_package(Boost COMPONENTS filesystem system date_time python REQUIRED)
message("Include dirs of boost: " ${Boost_INCLUDE_DIRS} )
message("Libs of boost: " ${Boost_LIBRARIES} )

include_directories(
    ${Boost_INCLUDE_DIRS}
        ...
)

target_link_libraries(Themisto
    ${Boost_LIBRARIES}
    ...
)
...

message звонки показывают:

Include dirs of boost: /usr/include
Libs of boost: /usr/lib/libboost_filesystem-mt.a/usr/lib/libboost_system-mt.a/usr/lib/libboost_date_time-mt.a/usr/lib/libboost_python-mt.a

хорошо, поэтому я добавил простой .cpp-файл для моего проекта с include of <boost/python.hpp>. Я получаю ошибку при компиляции:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory

поэтому не требуется включать все необходимые каталоги.

и второй вопрос:

как организовать 2-шаговое построение файлов script-cpp? В makefile я показал, что есть цель.o и цель.так, как процесс что 2 команды в cmake?

как я понимаю, лучший способ-создать подпроект и что-то там.

спасибо.

1 ответов


в вашем CMakeList отсутствует каталог include и библиотеки для python.формат txt. Используйте макрос PythonFindLibs или ту же стратегию find_package, которую вы использовали для Boost

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 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(Themisto
    ${Boost_LIBRARIES}
    ${PYTHON_LIBRARIES} # <------
    ...
)
...