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