2016-09-08 2 views
1

J'utilise le bjam de Boost et j'essaye de construire deux versions différentes de la même bibliothèque à partir du même fichier Jamfile. Une version de la bibliothèque doit être construite avec une macro définie pour activer des fonctionnalités spéciales. J'espère obtenir deux bibliothèques de noms différentes dans le même emplacement final.Utilisez bjam pour construire deux bibliothèques avec les mêmes sources

A titre d'exemple,

lib a 
: [glob a.cpp] 
; 

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

Le problème est que a.o, le fichier objet produit à partir a.cpp, est produit deux fois - une fois par chaque cible. L'erreur réelle que je reçois de bjam est

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: 

Est-ce que quelqu'un sait d'une façon d'obtenir des fichiers intermédiaires d'une cible pour aller à un autre endroit? Quelqu'un peut-il penser à une meilleure façon de réaliser ce que j'essaie de faire?

Répondre

1

Les paramètres sont free, and incidental, features et n'affectent pas la variante de construction. Ce que vous devez faire est de créer une fonctionnalité non-accessoire qui décrit la propriété qui varie votre build résultant. Par exemple:

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 ; 

Ce qui précède utilise les exigences de cible pour définir la bibliothèque créée lorsque vous demandez la fonctionnalité spéciale. Et il utilise également une propriété conditionnelle pour définir le symbole predef dans la bibliothèque spéciale. Il existe d'autres façons d'obtenir le résultat équivalent une fois que vous avez défini la fonction.