我们在非标准位置安装各种升级版本。
然后我们修改CPPPATH
和LIBPATH
以反映所选的推文版本。但是,某些提升标题不会被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)]
答案 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会忽略它