具有非标准位置的升压库的SCons建筑
SCons building with non-standard location of boost library
我们在非标准位置安装了各种增强版本。
然后,我们修改CPPPATH
和LIBPATH
以反映所选的加速版本。但是,某些提升标头不会被 scons 扫描程序拾取,因此它们不会被复制到变体输出位置。
scons 扫描程序未选取它们的原因是因为它们使用如下所示的宏:
#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_)
这会导致编译期间出现"找不到文件"错误。
我们如何修改 scons 脚本,以便它们复制整个提升库?
我研究了 Depends() 例程,但这需要一个目标节点,在我们将 Boost 引入构建系统时,我们没有方便的节点。这是因为我们所有的第三方库都包装有库级 SConscript,它基本上确定了应该(CPPPATH,LIBPATH)
使用哪个版本的第三方库。读取该库SConscript
时,没有目标节点可供其使用,因为这是在SConstruct
过程中很早就完成的。
关于如何解决这个问题的想法?
以下是我们对环境"declaring"
提升SConscript
:
#!/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)]
解决方案:
为"SRC_ROOT"添加第二个附加到CCFLAGS
env.Append(CCFLAGS = ['-isystem', os.path.join(env['SRC_ROOT'], PATH_INCLUDE)])
我可以单独使用上面的单个追加(用于SRC_ROOT),但我仍然看到警告(并将 Boost 文件复制到变体目录中),所以我需要两个 -isystem 路径来避免大量警告输出。
SRC_ROOT是我们src树的根。BUILD_ROOT是变体目录的根。
注意:您可以删除 CPPPATH,因为当 -isystem 使用相同的路径时,gcc 会忽略它
相关文章:
- 建筑 qtconnectivity bluez 缺失
- 建筑x86_64的未定义符号:"vtkDebugLeaksManager::vtkDebugLeaksManager()",引用自:
- Qt Creator项目打破:"找不到建筑x86_64符号"
- C++ 建筑x86_64的未定义符号(类似)
- 使用 SCons 提取每个编译单元的编译时间
- 建筑x86_64的未定义符号 (curlpp)
- C 基本建筑设计
- 指针和建筑的大小
- 使用 scons 在 windows 下编译C++代码,scons 添加"/Fo"作为编译选项
- 海湾合作委员会向 SCONS 标志
- VS 远程建筑:"Makefile.Targets error: Cannot copy file remotely to directory"
- 在scons中将访问说明符从private更改为public
- 如何使用SCONS构建CPP文件:每个文件都具有可执行文件
- 建筑x86_64的未定义符号 ->建筑x86_64找不到的符号
- 建筑x86_64的未定义符号 - 如何查找丢失的文件
- 在 SCONS 框架中链接 C 和 C++ 代码时遇到困难
- Scons 没有指定 CPPPATH,仍然可以检测到 .h 依赖性吗?
- scons建筑环境的继承
- 具有非标准位置的升压库的SCons建筑
- c++,链接时出错.建筑与scons