I'm new to CMake and have trouble understanding some usage concepts.
I'm calling a python script from a c++ program:
#include
...
Py_Initialize();
PyRun_SimpleFile(...);
Py_Finalize();
The corresponding cmake entries in my cmake file are:
FIND_PACKAGE(PythonLibs REQUIRED)
...
TARGET_LINK_LIBRARIES(MyApplication ${PYTHON_LIBRARIES})
This works as long as my python script isn't using any modules installed into the site-packages directory, otherwise I get an ImportError. This question shows how to find the location of the site-packages directory with CMake, but what should I tell CMake to do with it?
EDIT: Problem solved. Turns out FIND_PACKAGE(PythonLibs) finds a different python installation from what I'm normally using (/usr/local/lib/libpython2.7.dylib instead of /Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib - I'm on mac), which is how I get standard python modules, but none that I installed myself. To change the PYTHONPATH back to normal, I added
try:
import some_package
except ImportError:
if "my_python_path" in sys.path: raise
sys.path.append("my_python_path")
at the top of my python script.
解决方案
you can tell cmake where to find this PythonLibs by specifying the path to your python libraries like this:
cmake -DPYTHON_LIBRARIES=/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib .
this will then set the ${PYTHON_LIBRARIES} inside cmake to the right path.
To find out which other possible options (besided PYTHON_LIBRARIES) you can give to cmake (with the -DARG option) try running
ccmake .
Then press c to configure, and t for advanced options.
For example, you also might want to set
-DPYTHON_LIBRARY='/softwarepath/Python/Python2.7/lib/libpython2.7.so'
-DPYTHON_INCLUDE='/softwarepath/Python/Python2.7/include'