使用bjam构建两个具有相同源的库

Use bjam to build two libraries with same sources

本文关键字:两个 构建 bjam 使用      更新时间:2023-10-16

我正在使用Boost的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: 

有没有人知道一种方法来获得目标的中间文件去不同的位置?有人能想到更好的方法来实现我想要做的吗?

定义是免费的、附带的特性,不会影响构建变体。您需要做的是创建一个非偶然特性,该特性描述了改变最终构建的属性。例如:

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符号。一旦定义了特性,还有其他方法可以获得相同的结果。