2016-09-08 5 views
1

Boost의 bjam을 사용하고 있으며 동일한 Jamfile에서 동일한 라이브러리의 두 가지 버전을 빌드하려고합니다. 라이브러리의 한 버전은 특수 기능을 사용하도록 정의 된 매크로로 빌드해야합니다. 동일한 최종 위치에서 두 개의 서로 다른 이름 라이브러리를 얻고 싶습니다. 일단 각각의 타겟으로 - 예로서 bjam을 사용하여 같은 소스로 두 개의 라이브러리를 빌드하십시오.

,

lib a 
: [glob a.cpp] 
; 

lib a_special 
: [glob a.cpp] 
: <define>SPECIAL_FUNCTIONALITY 
; 

문제 a.o는, 오브젝트 파일이 a.cpp에서 생성되는 회 생산되고 있다는 점이다. 내가 bjam에서지고있어 실제 오류가

error: Name clash for '<pbin/gcc-5.2.1/debug/link-static>a.o' 
error: 
error: Tried to build the target twice, with property sets having 
error: these incompatible properties: 
error: 
error:  - none 
error:  - <define>SPECIAL_FUNCTIONALITY 
error: 

사람이 다른 위치로 이동 목표의 중간 파일을 얻을 수있는 방법을 알고 있나요입니까? 누구나 내가하려는 일을 성취하기위한 더 좋은 방법을 생각할 수 있습니까?

답변

1

정의는 free, and incidental, features이며 빌드 변형에 영향을주지 않습니다. 필요한 빌드를 변경하는 속성을 설명하는 비 부수적 인 기능을 만드는 것입니다. 예 :

import feature : feature ; 
feature special : off on : propagated ; 

lib a : a.cpp : <special>off ; 
lib a_special : a.cpp : <special>on <special>on:<define>SPECIAL_FUNCTIONALITY ; 

위의 표는 특수 기능을 요청할 때 빌드 할 라이브러리를 정의하기위한 대상 요구 사항을 사용합니다. 또한 조건부 특성을 사용하여 특수 라이브러리의 predef 기호를 정의합니다. 기능을 정의한 후에도 동일한 결과를 얻는 다른 방법이 있습니다.