SCons用非标准的boost库位置构建

时间:2016-02-24 22:02:39

标签: c++ boost scons

我们在非标准位置安装各种升级版本。

然后我们修改CPPPATHLIBPATH以反映所选的推文版本。但是,某些提升标题不会被scons Scanner拾取,因此它们不会被复制到变体输出位置。

他们没有被scons Scanner选中的原因是因为他们使用如下的宏:

#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_)

这会导致编译期间找不到文件错误。

我们如何修改scons脚本以便将整个boost库复制过来?

我查看了Depends()例程,但是这需要一个目标节点,在我们将Boost引入构建系统时,我们没有这个节点。 这是因为我们所有的第三方库都包含了一个库级SConscript,它基本上确定了应该使用哪个版本的第三方库(CPPPATH,LIBPATH)。当读取lib SConscript时,没有可用的目标节点,因为这是在SConstruct进程中很早就完成的。

关于如何解决这个问题的想法?

以下是SConscript "declaring"对我们环境的推动:

#!/usr/bin/env python

import os

Import('env')

PROJ         = 'boost'
TARGET       = PROJ
VERSION      = '1.57.0'
PATH_INCLUDE = 'cmn/thirdparty/boost/' + VERSION + '/include'
PATH_LIB     = 'cmn/thirdparty/boost/' + VERSION + '/lib'


## extend/modify the imported environment
if not PROJ in env['THIRDPARTY']:
  env['THIRDPARTY'][PROJ] = { 
    'TARGET'       : TARGET,
    'VERSION'      : VERSION,
    'PATH_INCLUDE' : PATH_INCLUDE,
    'PATH_LIB'     : PATH_LIB,
}

  ## because boost emits lots of warnings when compiled under c++11, we use the -isystem flag to disable the warnings
  env.Append(CCFLAGS = ['-isystem', os.path.join(env['BUILD_ROOT'], PATH_INCLUDE)])
  env.PrependUnique(CPPPATH = [ os.path.join(env['BUILD_ROOT'], PATH_INCLUDE)])
  env.PrependUnique(LIBPATH = [os.path.join(env['BUILD_ROOT'], PATH_LIB)]

1 个答案:

答案 0 :(得分:0)

解决方案:

为CCFLAGS添加第二个附加内容以获得' SRC_ROOT'

env.Append(CCFLAGS = ['-isystem', os.path.join(env['SRC_ROOT'], PATH_INCLUDE)])

我可以单独使用上面的单个附加(对于SRC_ROOT),但我仍然看到警告(并将Boost文件复制到变量目录中),所以我需要两个 - 系统路径来避免大量警告输出。

SRC_ROOT是我们src树的根。 BUILD_ROOT是变体目录的根。

注意:您可以删除CPPPATH,因为当用于-isystem的相同路径

时,gcc会忽略它