簡體   English   中英

Pythonlibs3 CMake和macOS

[英]Pythonlibs3 CMake and macOS

[更新2]

以下兩行,當添加到我的CMake文件中時,成功找到了python 3及其庫。 這只是在終端工作的原因是因為CLion正在使用其捆綁版本的CMake(3.6.3)和我終端使用的更新版本(3.7.2)正確找到python。

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

[UPDATE]我得到了cmake文件,但是,當我從終端運行時它只找到python3庫。 從CLion運行時,我收到以下錯誤:

CMake錯誤:此項目中使用以下變量,但它們設置為NOTFOUND。 請設置它們或確保它們在CMake文件中正確設置和測試:PYTHON_LIBRARY(ADVANCED)

[原始帖子]

我正在開發一個跨平台的C ++應用程序,並使用PythonLibs 3和boost_python來從python調用c ++方法。 在ubuntu這工作正常但是,在macOS上,我似乎無法讓cmake識別pythonlibs3。

在ubuntu上,以下行有效:

FIND_PACKAGE(PythonLibs 3 REQUIRED)

但是,在macOS上,它只能在/usr/libs/ pythonlibs 2.7.10。

我嘗試過以下方法:

  1. 使用python3虛擬環境然后運行cmake。
  2. set(Python_ADDITIONAL_VERSIONS 3.6)添加到我的cmake

其他信息:

  • 我用brew安裝了python3(3.6),它位於/ usr / local / bin中
  • 我使用的是cmake版本3.6.3
  • 當我寫FIND_PACKAGE(PythonInterp 3) cmake能夠找到我的python3安裝。
  • 檢查我的/usr/lib/文件夾時,我找到了libpython2.7.dylib但我在/usr/lib//usr/local/lib/沒有libpython3.6/dylib 這似乎是因為這個文件位於/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib

如果我將libpython3.6的位置添加到我的find_package中,

FIND_PACKAGE(PythonLibs 3 PATHS /usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/ REQUIRED)

它能夠找到庫但我得到錯誤:

找不到“PythonLibs”提供的包配置文件
(請求的版本3)具有以下任何名稱:

 PythonLibsConfig.cmake pythonlibs-config.cmake 

將“PythonLibs”的安裝前綴添加到CMAKE_PREFIX_PATH或將“PythonLibs_DIR”設置為包含上述文件之一的目錄。 如果“PythonLibs”提供單獨的開發包或SDK,請確保它已安裝。

另外,如果我嘗試在不使用find_package的情況下設置python變量,它可以找到庫:

SET(PYTHON_INCLUDE_PATH /usr/local/include/python3.6mu) SET(PYTHON_EXECUTABLE /usr/local/bin/python3.6mu) SET(PYTHON_INCLUDE_DIR /usr/local/include/python3.6mu) SET(PYTHON_LIBRARIES /usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/)

但是后來我的cmake中出現了以下錯誤:

PYTHON_ADD_MODULE(${PYRITMO_LIB} src/pythonwrappers.cpp)

錯誤如下:

未知的CMake命令“PYTHON_ADD_MODULE”。

原因似乎是因為此函數由FindPythonLibs.cmake提供,它由find_package(Pythonlibs)加載,因此,如果不使用它來定位PythonLibs,則無法調用此函數。

如上所述,在問題更新中,轉到CMake 3.7.2並使用以下兩行修復了我的問題:

FIND_PACKAGE(PythonInterp 3)
FIND_PACKAGE(PythonLibs 3)

[更新]對於使用Google Test並通過CMake安裝的任何人,將上述行放在Google Test代碼之前非常重要。 這是因為Google測試會查找python,並找到python2,然后當這兩行運行時,他們將無法找到python 3。

如果這兩行放在Google Test安裝代碼之前,則會找到python3並用於google測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM