以平台无关的方式查找libpython的路径(例如,用于cmake)

时间:2017-09-23 22:46:55

标签: python cmake

是否有任何独立于平台的方法来获取python安装的libpython的路径,以用作cmake参数? sysconfig.get_config_var提供了一些内容,但是没有一致的方法可以使这个工作。

在OSX上:

  • 没有变量包含库的实际基本名称(libpython2.7.dylib)
  • sysconfig.get_config_var('LIBDIR')返回libpython2.7.dylib所在的目录(/usr/local/opt/python/Frameworks/Python.framework/Versions/2.7/lib)
  • 编辑:当sysconfig报告符号链接时以及报告实际路径时,似乎存在一些差异。 LIBDIR确实包含libpython.2.7.dylib,但我刚注意到的是这是/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/的符号链接蟒。

    INSTSONAME指向Python.framework / Versions / 2.7 / Python,该路径的基本名称,但没有变量,我可以找到该路径的父部分。

在Ubuntu上:

  • sysconfig.get_config_var('INSTSONAME')给我了库的名称(libpython2.7.so.1.0)。
  • 没有变量包含它所在的目录(/ usr / lib / x86_64-linux-gnu /)。
    • LIBDIR仅返回/ usr / lib

1 个答案:

答案 0 :(得分:0)

CMake python模块:FindPythonLibsFindPythonInterp

如果这些不适合您,只需在调用cmake -DPYTHON_EXECUTABLE:FILEPATH-DPYTHON_LIBRARY:FILEPATH-DPYTHON_INCLUDE_DIR:FILEPAT时设置下一个变量,有关详细信息,请查看here

示例:

cmake .. -G "Sublime Text 2 - Ninja"
-DCMAKE_BUILD_TYPE=Release
-DPYTHON_EXECUTABLE:FILEPATH=d:\virtualenvs\python362_32
-DPYTHON_LIBRARY:FILEPATH=d:\virtualenvs\python362_32\libs\python36.lib
-DPYTHON_INCLUDE_DIR:FILEPAT=d:\virtualenvs\python362_32\include