2012-07-24 6 views
3

새로운 작업에서 오래된 소스를 유지하면서 나는 더 깨끗하게하려고 노력하고 있습니다. 이 예에서는 python2.5에 매우 정적으로 의존하는 큰 프로젝트 (1,001 개의 소스 파일)가 있습니다. 내 dev 머신에 2.6이 설치되어 있고,이 프로젝트에> = 2.5 및 < 3.0을 포함시키고 연결 시키려고합니다.다른 버전의 Python.h를 포함하고 여러 버전의 Python과 연결하는 것을 포함합니다.

현재 두 가지 문제가 있습니다. 이 .c 파일 : 나는 그것이 적절한 디렉토리를 사용하도록 .c 파일을 변경합니까 내가 어떻게 업데이트하나요 방법 :

#include <python2.5/Python.h> 

그리고

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

그래서, 내 질문은 메이크에서

makefile이 적절한 라이브러리에 링크되도록?

EDIT : 그리고 내가 그 일을하는 동안, glib-2.0에 똑같은 치료법을 줄 수 있다고 생각합니다.

+0

distutils 또는 다른 파이썬 인식 빌드 시스템을 사용하고 있습니까? Glib의 경우에는'glib-config'에서 컴파일 및 링크 플래그를 가져와야합니다. –

+0

어제 더 읽은 후, 가장 간단한 해결책은 자동 도구를 사용하는 것입니다. – musasabi

+0

파이썬 커뮤니티의 일반적인 충고는 * embed *하지 않는 것입니다. 즉, 다른 방법이 아닌 C를 호출하는 Python 프로그램으로 만듭니다. 당신이 그렇게한다면, 당신은 setuptools를 할 수는 있지만, 그런 식으로 일하기 위해 커다란 프로그램을 다시 작성하는 것은 힘든 일이라고 상상해보십시오. –

답변

1

C 파일은 변경하지 않지만 포함 경로와 LDFLAGS는 변경하지 않을 것입니다.

는 그래서 .C가있을 것이다 :
#include <Python.h> 

그리고에

경로를 포함하면 -I/경로를 추가 /에/파이썬/2.5/포함 -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은 설정해야하는 변수입니다.

아니면 경로가 균일 한 경우 : 당신이 SCons는를 사용하는 경우

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

, 그것은 변형 빌드를 사용하여 빌드 이런 종류의 스크립트에보다 쉽게 ​​할 수 있습니다.

파이썬 버전마다 다른 소스 코드가 있습니까?

또는 다른 버전의 Python을 사용하여 동일한 소스 코드를 컴파일하고 연결하고 싶습니까?