我刚接触过cmake,很难理解一些使用概念。
我从C++程序中调用一个Python脚本:

#include <Python.h>
...
Py_Initialize();
PyRun_SimpleFile(...);
Py_Finalize();

我的cmake文件中对应的cmake条目是:
FIND_PACKAGE(PythonLibs REQUIRED)
...
TARGET_LINK_LIBRARIES(MyApplication ${PYTHON_LIBRARIES})

只要我的python脚本没有使用任何安装到site packages目录中的模块,这就可以工作,否则我会得到一个importerror。This question演示如何使用cmake查找站点包目录的位置,但我应该告诉cmake如何使用它?
编辑:问题已解决。结果发现find_package(pythonlibs)找到了与我通常使用的不同的python安装方式(/usr/local/lib/lib python 2.7.dylib,而不是/library/frameworks/python.framework/versions/2.7/lib/libpython2.7.dylib-我在Mac上),这就是我获得标准python模块的方式,但没有一个是我插入的。我自己爬起来了。我补充道:“为了把蟒蛇的路径恢复正常。”
try:
  import some_package
except ImportError:
  if "my_python_path" in sys.path: raise
  sys.path.append("my_python_path")

在我的python脚本顶部。

最佳答案

您可以通过如下指定到Python库的路径来告诉cmake在何处找到这个pythonlibs:

cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .

然后,这会将cmake内部的$python_库设置为正确的路径。
要找出其他可能的选项(除了python库),您可以给cmake(使用-darg选项)尝试运行
ccmake .

然后按c进行配置,按t进行高级选项。
例如,您可能还需要设置
-DPYTHON_LIBRARY='/softwarepath/Python/Python2.7/lib/libpython2.7.so'
-DPYTHON_INCLUDE='/softwarepath/Python/Python2.7/include'

关于python - cmake发现了错误的python库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7660001/

10-12 22:12
查看更多