是否可以使用相同的命令安装库的调试和发布变体?

时间:2010-09-03 14:23:11

标签: bjam boost-build boost-bjam

我正在使用以下Jamfile(在目录/ home / morpheus / base / CDef中):


lib CDef:[glob * .cpp]:static;

安装 libCDef  :CDef  :LIB    “/家庭/睡眠/ base_install / lib目录”  : 发布  ;

安装_libCDef_D  :CDef  :LIB    “/家庭/睡眠/ base_install / libdebug”  :调试  ;


我想知道两条安装线是否可以更改为同时具有调试和释放指令的安装线。

另外在不同的目录(/ home / morpheus / FSLR)中使用不同Jamfile中的库我使用以下Jamfile来构建exe调用FSLR:


lib CDef ::释放CDef / home / morpheus / base_install / lib; lib CDef :: debug CDef / home / morpheus / base_install / libdebug;

exe callFSLR:call_FSLR.cpp CDef :: debug release;

安装install-bin  :callFSLR  :“/ home / morpheus / base_install / bin”发布  ;


我相信使用“use-project”来引用Jamfile / home / morpheus / base / CDef / Jamfile中的CDef可能是值得建议的吗?

1 个答案:

答案 0 :(得分:0)

(我认为你的果酱规则中缺少一些东西,可能是由于格式化。)

是的,您绝对可以使用conditional requirements使用相同的规则定义调试和生产目标。一个例子是the documentation of the install rule

我相信您的原始规则看起来像

install libCDef
  : CDef
  : <install-type>LIB
    <location>"/home/morpheus/base_install/lib"
  : <variant>release ;

install _libCDef_D
  : CDef
  : <install-type>LIB
    <location>"/home/morpheus/base_install/libdebug"
  : <variant>debug ;

您希望在变体上设置location功能依赖项,如下所示:

install libCDef
  : CDef
  : <install-type>LIB
    <variant>release:<location>"/home/morpheus/base_install/lib"
    <variant>debug:<location>"/home/morpheus/base_install/libdebug"
  ;

至于第二个问题,是的,use-project会有所帮助,尽管没有必要。你想这样做

exe callFSLR : call_FSLR.cpp ../base/CDef//CDef ;

../base/CDef//CDef指的是项目(目录)CDef中定义的名为../base/CDef的目标。这是指库规则,因此boost build将使用bin目录中的库版本,而不是安装规则创建的版本。 (如果您有动态库问题,这可能很重要。)此外,您不需要紧跟此规则的lib CDef

为避免../base/CDef的笨拙,您可以使用use-project规则为项目创建新定义。那么,如果你重新组织目录结构,你只有一个地方可以改变它。

use-project /CDef-project : ../base/CDef ;

exe callFSLR : call_FSLR.cpp /CDef-project//CDef ;

如果你打算在这个Jamfile中使用一个目标,另一种可能性就是使用别名规则。

alias CDef : ../base/CDef//CDef ;

exe callFSLR : call_FSLR.cpp CDef ;