Does CMake support Python3?

10,302

Solution 1

Can you make sure your build directory is clean? I had the exact same issue and after cleaning the dir it worked.

Solution 2

CMake 3.12 should help you with your issue. Citing the release notes:

New “FindPython3” and “FindPython2” modules, as well as a new “FindPython” module, have been added to provide a new way to locate python environments.

Share:
10,302
mijc
Author by

mijc

Updated on June 09, 2022

Comments

  • mijc
    mijc almost 2 years

    I am not able to build a Python wrapper module for my C library via CMake and Swig for Python3. Everything works fine for Python2.x but it looks like CMake cannot find Python3. I already looked around and tried a couple of things.

    For example, my python executable links to Python3, as I read CMake will find this version first.

    Please see here the SWIG part of the 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})
    

    Unfortunately, the output after calling cmake shows that only python2.7 is found:

    -- 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
    
  • Dimitar Asenov
    Dimitar Asenov over 8 years
    This fixed the problem for me, too. Thanks.
  • Jon Deaton
    Jon Deaton over 6 years
    Worked perfectly!