2013-07-17 17 views
6

Nie jestem w stanie zbudować modułu opakowania Pythona dla mojej biblioteki C za pomocą CMake i Swig dla Python3. Wszystko działa poprawnie dla Python2.x, ale wygląda na to, że CMake nie może znaleźć Python3. Rozejrzałem się już i spróbowałem kilku rzeczy.Czy CMake obsługuje Python3?

Na przykład mój plik wykonywalny python łączy się z Python3, ponieważ odczytam CMake znajdzie tę wersję jako pierwszą.

Proszę zobaczyć tutaj część łyk z CMakeLists.txt:

FIND_PACKAGE(SWIG REQUIRED) 
INCLUDE(${SWIG_USE_FILE}) 

FIND_PACKAGE(PythonInterp 3) 
FIND_PACKAGE(PythonLibs 3) 

FIND_PATH(PYTHON_INCLUDE_PATH Python.h 
    /usr/include 
    /usr/local/include) 
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS}) 

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) 

SET(CMAKE_SWIG_FLAGS "") 

SET_SOURCE_FILES_PROPERTIES(kissCT3.i PROPERTIES CPLUSPLUS ON) 
#SET_SOURCE_FILES_PROPERTIES(kissCT3.i PROPERTIES SWIG_FLAGS "-includeall -py3") 

SWIG_ADD_MODULE(kissCT3 python kissCT3.i) 
SWIG_LINK_LIBRARIES(kissCT3 libct2d matio kissfft ${PYTHON_LIBRARIES}) 

Niestety, wyjście po wywołaniu cmake pokazuje, że tylko python2.7 znaleziono:

-- Found SWIG: /usr/bin/swig2.0 (found version "2.0.4") 
-- Found PythonInterp: /usr/bin/python2.7 (Required is at least version "3") 
-- Found PythonLibs: /usr/lib/libpython2.7.so (Required is at least version "3") 
-- Configuring done 
-- Generating done 
+0

Chciałem zasugerować zrobić własną wersję modułu znajdź dla Pythona, który obsługuje python3 i umieścić, że w tym samym folder jako CMakelists.txt jednak wydaje się, że cmake-2.8.11.X ma bezpośrednie wsparcie dla python3. Czy masz starą wersję cmake? – drescherjm

+0

Używam cmake w wersji 2.8.5. Więc to może być problem, zaglądnę w to, dzięki! – mijc

Odpowiedz

1

I niby rozwiązał problem przez ręczne ustawienie wersji pythona. To nie jest naprawdę godny polecenia, ale to działa na teraz (należy pamiętać, że trzeba użyć własnej ścieżki instalacyjnej wersji Pythona, którego chcesz używać):

SET(PYTHON_INCLUDE_PATH /usr/include/python3.2mu) 
SET(PYTHON_LIBRARIES /usr/lib/libpython3.2mu.so) 
SET(PYTHON_EXECUTABLE /usr/bin/python3.2mu) 
SET(PYTHON_INCLUDE_DIR /usr/include/python3.2mu) 
6

można upewnić się, że katalog budowania jest czysty? Miałem dokładnie ten sam problem i po oczyszczeniu reżimu zadziałało.

+2

Naprawiło to również problem dla mnie. Dzięki. –

+0

Działa doskonale! –

0

Jest to znany bug, ale niestety nie jest to rozwiązane w tej chwili zobaczyć http://www.cmake.org/Bug/print_bug_page.php?bug_id=13794

+0

To prawda. Ale jak powiedziałem poniżej, możesz jakoś rozwiązać problem, ręcznie ustawiając wersję python. Python 3 nie jest oficjalnie wspierany przez cmake, ale działa do tej pory. – mijc

+0

IIUC ten błąd został rozwiązany. –