2012-09-04 2 views
1

일부 C++ 클래스를 감싸기 위해 Boost.Python과 함께 사용하는 Jamfile이 있습니다.bjam의 pythonpath 기능 사용하기

rule run-test (test-name : sources +) 
{ 
    import testing ; 
    testing.make-test run-pyd : $(sources) : : $(test-name) ; 
} 

다음 :

PROJECT_NAME = example ; 
run-test $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ; 

이 example_ext.so 구축 할 것, 다음 않는 test_example_ext.py 실행 나는 Jamfile 자동으로 파이썬 스크립트를 실행 후 컴파일 단계로 확장을로드가 간단한 "가져 오기 example_ext"다음 몇 가지 기본적인 테스트.

문제는 다른 패키지에서 일부 Python 모듈을 가져올 수 있도록 test_example_ext.py가 필요하므로 PYTHONPATH를 설정해야합니다. 커맨드 라인에서 이것은 문제가되지 않지만 bjam은 내 보낸 경우에도 생성 된 파이썬 프로세스로이를 수행하는 것처럼 보이지 않습니다.

$ export PYTHONPATH=.. 

즉 :

이 경우에는 내가 동등한를 찾고 있어요 파이썬 검색 경로를 bjam을 실행하는 곳의 한 수준 위에 설정합니다.

내가 get로 관리했습니다 가장 가까운이 내가 원하는 것을 것을 해결하는 것입니다

$ bjam pythonpath=.. 

이 실제로 작동합니다. 하지만 Jamfile에서 명령 줄에 의존하지 않고 이것을 설정하려고합니다. 나는 이것이 속성 인이고 어딘가에서 <pythonpath>..을 사용할 수 있다고 bjam 매뉴얼을 읽었습니다. 그러나 그것은 어디에서 말하지 않습니다.

내 문제는이 속성을 Jamfile에 지정하는 방법을 찾지 못한다는 것입니다. 어디로 간다? 구문은 무엇입니까? user-config.jam 또는 "run-pyd"또는 심지어 python 확장 규칙의 일부인 "import python;"또는 "python 사용 ..."의 일부입니까? 나는이 모든 것을 무작위로 이해하거나 성공하지 않고 시도했다.

boost_1_50_0/tools/build/v2/tools/python.jam에서 나는 발견

# PYTHONPATH 기능을 실행 PYD가 설정 한 PYTHONPATH
# 환경 변수에 대한 추가 요소를 지정합니다. 예를 들어 pythonpath를 사용하여
#에 액세스 할 수 있습니다. 개발 시스템의 기본 경로에
#이 설치되어 있지 않습니다.
feature.feature pythonpath : : 무료 선택적 경로; 'PYTHONPATH'속성 (일명 기능)를 선언하는 것으로 나타납니다,하지만 문맥

? 어디에서 어떻게 사용할 수 있습니까?

페이지 및 this 페이지에서는 이러한 선을 따라 속성을 정의하는 방법을 보여 주지만 실제로 사용하는 방법이나 위치는 설명하지 않습니다.

답변

3

나는 내 자신의 질문에 대한 답을 찾은 것 같습니다.

해결 방법은 아직 작동하지 않거나이를 지정하는 의미를 이해하지 못했지만 requirements 키워드가있는 project 규칙이 아래에있는 것으로 보입니다.

PROJECT_NAME = example ; 

import python ; 

# sets PYTHONPATH when executing run-test 
project : requirements <pythonpath>.. ; 

python-extension $(PROJECT_NAME)_ext : 
    $(PROJECT_NAME).cpp 
    $(PROJECT_NAME)_ext.cpp 
: 
; 

# Declare test targets 
run-test $(PROJECT_NAME) : $(PROJECT_NAME)_ext test_$(PROJECT_NAME)_ext.py ; 

완성도를 들어, 난 사실이 하나의 디렉토리 위로 정보 파일 Jamroot을 따기가, 다음과 같습니다 :

 
import python ; 

# Specify the path to the Boost project. If you move this project, 
# adjust this path to refer to the Boost root directory. 
use-project boost 
    : ./boost ; 

# Set up the project-wide requirements that everything uses the 
# boost_python library from the project whose global ID is 
# /boost/python. 
project 
    : requirements <library>/boost/python//boost_python ; 

# A little "rule" (function) to clean up the syntax of declaring tests 
# of these extension modules. 
rule run-test (test-name : sources +) 
{ 
    import testing ; 
    testing.make-test run-pyd : $(sources) : : $(test-name) ; 
} 

여기 내 Jamfile입니다

관련 문제