boost build b2 / bjam构建配置

时间:2015-01-21 08:10:52

标签: boost build config bjam

我目前正在开发一个使用bjam(boost build)作为构建器的c ++项目。现在我对这个构建系统非常满意并且一切都运行良好,但有一个例外,我找不到一个简单的解决方案:

我希望有一个这个项目的构建配置,用户可以在其中打开或关闭某些模块及其依赖项(如果找不到软件也会自动检查 - > gt;禁用模块..)。对于依赖项,我的意思是例如需要此模块才能工作的应用程序。因此,在禁用模块时也不应构建这些应用程序。

由于我没有找到任何可以为我做这项工作的东西,我在jamroot(顶级jamfile)中创建了一些类似于项目模块结构的变量,并且我在相应的jamfiles中的if语句中使用这些变量打开和关闭的东西。请参阅下面的示例:

Jamroot摘录:

constant build_DataReader : 1 ;
constant build_RootReader : 1 ;
constant build_AsciiReader : 1 ;

if $(build_DataReader) {
  build-project DataReader ;
}

DataReader模块的Jamfile:

sources = [ glob *.cpp ] ;
if $(build_RootReader)
{
    build-project RootReader ;
    sources = $(sources) $(DATAREADER)/RootReader//RootReader ;
}
if $(build_AsciiReader)
{
    build-project AsciiReader ;
    sources = $(sources) $(DATAREADER)/AsciiReader//AsciiReader ;
}

# Build libDataReader.so
lib DataReader : 
        $(sources)
        ;

install dist : DataReader : <location>$(TOP)/lib ;

然而,这不是一个非常优雅的解决方案,因为当依赖关系改变等时,我将不得不更新这些硬编码的if语句。此外,我自己必须在项目中构建模块的这种树结构很烦人,因为boost build正在内部构建相同的东西。 boost构建中是否有某种选项可以在不在当前构建过程中构建某些需求的情况下构建应用程序?

我目前看到的唯一解决方案是构建一个完整的新配置工具,为我创建阻塞文件,就像我想要的那样(预处理器)。然而,这是我不想开始的工作,而且我并不相信没有任何东西可以做我认为很常见的东西。但可能我完全错过了一些东西......

希望我以一种可以理解的方式解释它,提前谢谢!

史蒂夫

0 个答案:

没有答案