2016-09-08 1 views
1

Я использую bjam Boost, и я пытаюсь создать две разные версии одной и той же библиотеки из одного 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 в специальной библиотеке. Существуют и другие способы получения эквивалентного результата после определения определенной функции.

Смежные вопросы