2013-07-17 39 views
6

Tôi không thể xây dựng mô-đun trình bao bọc Python cho thư viện C của mình qua CMake và Swig cho Python3. Mọi thứ hoạt động tốt cho Python2.x nhưng có vẻ như CMake không thể tìm thấy Python3. Tôi đã nhìn xung quanh và thử một vài thứ.CMake có hỗ trợ Python3 không?

Ví dụ: python liên kết thực thi của tôi với Python3, như tôi đã đọc, CMake sẽ tìm thấy phiên bản này trước tiên.

Xin vui lòng xem ở đây phần SWIG của 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}) 

Thật không may, sản lượng sau khi gọi cmake cho thấy rằng chỉ python2.7 được tìm thấy:

-- 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

tôi sẽ đề nghị bạn nên thực hiện phiên bản riêng của bạn về module công cụ tìm cho python hỗ trợ python3 và đưa rằng trong cùng một thư mục như CMakelists.txt của bạn tuy nhiên nó xuất hiện rằng cmake-2.8.11.X có hỗ trợ trực tiếp cho python3. Bạn có một số phiên bản cũ của cmake? – drescherjm

+0

Tôi đang sử dụng phiên bản cmake 2.8.5. Vì vậy, đây có thể là vấn đề, tôi sẽ xem xét nó, cảm ơn! – mijc

Trả lời

1

tôi loại giải quyết vấn đề bằng cách đặt phiên bản python theo cách thủ công. Đây không phải là thực sự recommendable nhưng nó hoạt động cho bây giờ (lưu ý rằng bạn phải sử dụng đường dẫn cài đặt của riêng bạn của phiên bản python bạn muốn sử dụng):

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

Bạn có thể chắc chắn rằng thư mục xây dựng của bạn được sạch sẽ? Tôi đã có cùng một vấn đề chính xác và sau khi làm sạch các dir nó làm việc.

+2

Điều này đã khắc phục sự cố cho tôi. Cảm ơn. –

+0

Làm việc hoàn hảo! –

0

Đây là một lỗi được biết đến, nhưng tiếc là nó không được giải quyết trong thời điểm này, xem http://www.cmake.org/Bug/print_bug_page.php?bug_id=13794

+0

Đó là sự thật. Nhưng như tôi đã nói dưới đây, bạn bằng cách nào đó có thể giải quyết vấn đề bằng cách đặt thủ công phiên bản python. Python 3 không được chính thức hỗ trợ bởi cmake, nhưng nó hoạt động cho đến nay. – mijc

+0

IIUC lỗi đã được giải quyết. –