2012-07-24 336 views
3

在我的新工作中维护旧的源代码时,我试图让事情变得更清洁。在这个例子中,我有一个很大的项目(1,001源文件),它非常静态地依赖python2.5。在我的开发机器上,我已经安装了2.6,并且我试图让这个项目包含并链接到> = 2.5和< 3.0。#include <>'Python.h的不同版本并链接到多个版本的Python

我目前看到两个问题。从.c文件:

#include <python2.5/Python.h> 

而且从makefile文件

LDFLAGS = $(LIBS) -lusb-1.0 -lpthread -lSound -lsqlite3 -lm -lglib-2.0 -lpython2.5 

所以,我的问题是:我怎么改变.c文件使得它使用适当的目录,我如何更新生成文件,以便它链接到适当的库?

编辑:虽然我在这,我想我可以给巧舌如簧 - 2.0同样的待遇。

+0

正在使用distutils,或另一个Python感知构建系统,一个选项?在Glib的情况下,我认为你应该从'glib-config'获得编译和链接标志。 – 2012-07-24 19:21:37

+0

昨天读了更多的东西之后,我认为最简单的解决方案就是使用自动工具。 – musasabi 2012-07-25 14:32:00

+0

Python社区通常的建议是*扩展,而不是嵌入*,即将其作为一个Python程序调用到C而不是其他方式。如果你这样做了,你可以设置setuptools,但我想这可能是一个艰巨的工作,重写一个大型程序以这种方式工作。 – 2012-07-25 14:58:37

回答

1

我不会更改C文件,但包含路径和LDFLAGS。

所以.C将有:

#include <Python.h> 

而且在include路径添加-I /路径/到/蟒蛇/ 2.5/include和-Lpython2.5

如果使用makefile,您可以使用+ =将选项添加到包含路径和库路径。

LDFLAGS = $(LIBS) -lusb-1.0 -lpthread -lSound -lsqlite3 -lm 
... 
ifeq ($(PYTHON_VERSION),2.5) 
    LDFLAGS += -lpython2.5 
    CFLAGS += -I/path/to/python/2.5/include 
else 
... 
endif 

其中PYTHON_VERSION是您必须设置的变量。

或者,如果你的路径是一致的:

LDFLAGS += -lpython$(PYTHON_VERSION) 
CFLAGS += -I/path/to/python/$(PYTHON_VERSION)/include 

如果使用SCons,就可以更容易编写脚本这种使用变种构建构建的。

你对不同版本的Python有不同的源代码吗?

或者你只是想使用不同版本的Python编译和链接相同的源代码?