Overview
#include "Python.h" int main() { Py_Initialize(); PyRun_SimpleString("print \'Hello qmake!\'"); Py_Finalize(); return 0; }If we want to compile c++ program in which an python interpreter embeded, we need to know where's the python.
g++ main.cpp -ID:\Python27\include D:\Python27\libs\python27.libSo how can we avoid using the specific path such as D:\Python27?
Cmake
If we using cmake, all we needed is an CMakeLists.txtcmake_minimum_required(VERSION 2.8) project(HELLO) find_package(PythonLibs REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS}) add_executable(hello main.cpp)In this file, we do not need to specify the path of python.
qmake
Then how about qmake ?A XXX.pro file can be written like this:CONFIG -= qt CONFIG += console SOURCES += main.cpp unix{ CONFIG += link_pkgconfig PKGCONFIG += python } # NO! I hate following code win32{ INCLUDEPATH += D:\\Python27\\include LIBS += D:\\Python27\\libs\python27.lib }pkg_config can be used to extract infomation needed under Linux, but it does not works well under windows.
And finially, I try to get the home path of python from the register, which works very well.
win32:{ PY_VERSIONS = 2.7 2.6 2.5 2.4 for(PY_VERSION, PY_VERSIONS){ system(reg query HKLM\\SOFTWARE\\Python\\PythonCore\\$$PY_VERSION\\InstallPath /ve) { PY_HOME = $$quote($$system(reg query HKLM\\SOFTWARE\\Python\\PythonCore\\$$PY_VERSION\\InstallPath /ve)) PY_HOME ~= s/.*(\\w:.*)/\\1 !exists($$PY_HOME\\include\\Python.h):next() INCLUDEPATH *= $$PY_HOME\\include PY_LIB_BASENAME = python$${PY_VERSION} PY_LIB_BASENAME ~= s/\\./ CONFIG(debug, debug|release):PY_LIB_BASENAME = $${PY_LIB_BASENAME}_d LIBS *= $$PY_HOME\\libs\\$${PY_LIB_BASENAME}.lib message(Python$$PY_VERSION found at $$PY_HOME) break() } } }