2010-04-26 4 views
5

설명서를 읽으려고했지만 오히려 뚫을 수 없으므로 간단한 답변을 얻을 수 있기를 바랍니다. 컴파일러 명령 줄에 일부 매크로 정의를 추가하는 'debug'를 기반으로 새로운 'variant'를 정의하려고합니다 (예 : "-DSOMEMACRO"). 나는 이것을 디버그의 "하위 변형"으로 할 수있을 것이라고 생각한다. 그렇지 않으면 새로운 변형을 '디버그'로 정의 할 수 있을지 모르겠다. $ BOOST_BUILD_DIR/build에 feature.jam이있는 것 같습니다. 아마도 내가 진정으로 원했던 것은 단순히 새로운 '기능'일뿐입니다. 그러나 내가해야 할 일과 장소를 정확히 알려주지 못했습니다. '기능'을 통해 빌드 제품을 다른 디렉토리로 보낼 수 있는지 여부는 알 수 없습니다. '디버그'빌드.bjam에서 새 변종을 만드는 방법

모든 의견을 환영합니다. (궁금한 점이 있으시면 회사 표준으로 채택 되었기 때문에 bjam을 사용해야합니다.)

답변

7

나는 당신이 원하는 것이 확실치 않지만, 많은 가능성이 있습니다.

A. 정의 된 SOMEMACRO 매크로를 사용하여 항상 컴파일하려고합니다. 이 경우에, Jamfile에서 프로젝트를 위해 당신이 SOMEMACRO 항상 정의해야하는 경우가 <variant>debug: 조건을 제거 할 수 있습니다

project 
    : requirements # These are requirements for this project 
     # If compiling debug, define SOMEMACRO 
     <variant>debug:<define>SOMEMACRO 
    : usage-requirements 
     # These are requirements projects using this project must have 
     <variant>debug:<define>SOMEMACRO 
    ; 

를 추가합니다. 다른 플래그를 설정해야하는 경우 <cflags>, <cxxflags> 및 을 적절하게 사용할 수 있습니다.

B. 플래그를 켜기/끄기를 기본 설정으로 설정하고 싶으면 설정을 해제하고 그 설정은 해제 된 빌드와 호환되지 않습니다. 어떤 경우에는 기능을 원합니다.

import feature ; 
feature.feature steves-feature : off on 
    : composite propagated link-incompatible ; 
feature.compose <steves-feature>on : <define>SOMEMACRO ; 

feature.feature 규칙은 두 가지 값과 세 속성 <steves-feature>라는 기능을 정의합니다. composite은 다른 기능 (이 경우 <define>SOMEMACRO)으로 구성된 기능임을 의미합니다. propagated은이 기능 세트가있는 대상을 포함하는 모든 대상에도이 기능이 설정됨을 의미합니다. link-incompatible<steves-feature>on 인 대상을 <steves-feature>off 인 대상과 결합 할 수 없음을 의미합니다. (그 결과, bjam이 기능은 어떤 대상이 설정되어있는 경우 steves-feature-on 또는 steves-feature-off라는 이름의 디렉토리에 생성 된 파일을 넣어 것입니다.)

이 기능은 바로 위의 프로젝트 규칙에 사용되는 <define> 기능처럼 사용할 수 있습니다 섹션. (프로젝트 규칙의 default-build 섹션에 추가 할 수도 있습니다.)

명령 줄에서 기능을 설정할 수도 있습니다 (bjam steves-feature=on).

C. 완전한 변형이 필요합니다. 생각 해봐야 할 점은 함께 설정해야하는 다양한 기능을 가진 몇 가지 공통 빌드 구성이있는 경우라고 생각합니다. 이미 위와 같은 기능을 이미 만들었 으면 쉽습니다.

variant steves-debug : debug : <steves-feature>on ; 

이 변종은 debug 변형 그러나 추가 기능 <steves-feature>on와 동일합니다.

나는 variant 규칙을 사용한 적이 없기 때문에 어딘가에서 가져와야 할 수도 있습니다.또한 할 수있을 수도 있습니다

variant steves-debug : debug : <define>SOMEMACRO ; 

그러나 bjam이 디렉토리 구조를 만들지는 모르겠습니다. (아마도 가능할 것입니다.)

+0

감사합니다. 케이스 B 또는 아마도 C가 내가 찾고있는 것이고, 가장 간단한 것이기 때문에 B를 먼저 시도 할 것입니다. 매우 자세한 설명 주셔서 감사합니다. –

+0

이 방법이 효과가 있다면 대답 옆에있는 체크 표시를 클릭하여 답변으로 표시해야합니다. 그렇게 다른 사람들은 그 질문이 답을 얻는다는 것을 압니다. 그리고 나는 신용을 얻는다. :-) (이전 질문에 대한 답변을 수락하지 못했습니다.) – AFoglia

+0

죄송합니다. 지금 선택 했으므로 여전히 프로토콜에 익숙해 져 있습니다. –