0

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


lib CDef:[glob *.cpp]:静态;

安装libCDef : CDef : LIB "/home/morpheus/base_install/lib" : 发布;

安装_libCDef_D:CDef:LIB“/home/morpheus/base_install/libdebug”:调试;


我想知道是否可以将两条安装行更改为同时具有调试和发布指令的安装行。

还要使用不同目录(/home/morpheus/FSLR)中不同 Jamfile 中的库,我使用以下 Jamfile 来构建 exe callFSLR:


lib CDef :: 释放 CDef /home/morpheus/base_install/lib ; lib CDef :: 调试 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 可能是可取的?

4

1 回答 1

0

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

是的,您绝对可以使用条件要求使用相同的规则定义调试和生产目标。一个例子甚至是规则的文档install

我相信你原来的规则看起来像

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//CDefCDef在项目(目录)中定义的命名目标../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 ;
于 2010-09-05T04:10:44.600 回答