Используйте bjam для создания двух библиотек с одинаковыми источниками

Я использую Boost's bjam и пытаюсь собрать две разные версии одной и той же библиотеки из одного и того же Jamfile. Одна версия библиотеки должна быть построена с макросом, определенным для включения специальных функций. Я надеюсь получить две разные библиотеки имен в одном и том же окончательном месте.

Например,

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 ответ

Определения являются бесплатными и случайными функциями и не влияют на вариант сборки. Что вам нужно сделать, это создать не случайную функцию, которая описывает свойство, которое изменяет вашу результирующую сборку. Например:

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 ;

Выше используются целевые требования, чтобы определить, какая библиотека создается при запросе специальных функций. И он также использует условное свойство, чтобы определить предопределенный символ в специальной библиотеке. Существуют и другие способы получения эквивалентного результата, если у вас есть определенная функция.

Другие вопросы по тегам