boost构建b2/bjam构建配置 我目前正在使用一个C++项目,它使用BJAM(Boost Build)作为构建器。目前,我对这个构建系统非常满意,一切都很顺利,但有一个例外,我无法找到一个简单的解决方案:

boost构建b2/bjam构建配置 我目前正在使用一个C++项目,它使用BJAM(Boost Build)作为构建器。目前,我对这个构建系统非常满意,一切都很顺利,但有一个例外,我无法找到一个简单的解决方案:,boost,build,config,bjam,Boost,Build,Config,Bjam,我想有一个这个项目的构建配置,在其中,用户可以打开或关闭某些模块及其依赖项(还可以自动检查是否未找到软件->禁用模块..)。对于依赖项,我指的是需要此模块工作的示例应用程序。因此,当模块被禁用时,也不应构建这些应用程序 因为我发现没有任何东西可以帮我完成这项工作,所以我在jamroot(顶级jamfile)中创建了一些类似于项目模块结构的变量,并在相应jamfiles中的if语句中使用这些变量来打开和关闭东西。请参见下面的示例: Jamroot摘录: constant build_DataRea

我想有一个这个项目的构建配置,在其中,用户可以打开或关闭某些模块及其依赖项(还可以自动检查是否未找到软件->禁用模块..)。对于依赖项,我指的是需要此模块工作的示例应用程序。因此,当模块被禁用时,也不应构建这些应用程序

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

Jamroot摘录:

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

if $(build_DataReader) {
  build-project DataReader ;
}
DataReader模块的文件:

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 ;
sources=[glob*.cpp];
if$(build\u RootReader)
{
构建项目根阅读器;
sources=$(sources)$(DATAREADER)/RootReader//RootReader;
}
if$(构建AsciiReader)
{
构建项目AsciiReader;
sources=$(sources)$(DATAREADER)/asciireder//asciireder;
}
#构建libDataReader.so
lib数据读取器:
$(来源)
;
安装dist:DataReader:$(顶部)/lib;
然而,这不是一个非常优雅的解决方案,因为当依赖项发生变化时,我必须不断更新这些硬编码的if语句。。此外,由于boost build本身也在内部构建相同的东西,因此必须自己构建项目中模块的树状结构也很烦人。在boost build中是否有某种选项可以使应用程序的构建成为可选的,以防当前构建过程中没有构建某些需求

目前我看到的唯一解决方案是构造一个完整的新配置工具,按照我的需要为我创建JAM文件(预处理器)。然而,这是我不想开始的工作,我并不真的相信,在我看来,没有什么东西可以做一些非常普通的事情。但也许我完全错过了什么

希望我能解释清楚,提前谢谢


Steve

如果你在Boost Build列表中提到这个问题,可能是最好的选择。因为它需要一些来回的回答和更好地理解您的用例。好的,我来试一试